2011-10-24 9 views
5

私はこのインターフェイスを実装する多くのクラスとインターフェイスを持っていますが、今ではオブジェクトのクラスではなくクラスの型だけを引数として渡せますか?引数としてC++クラスタイプ

このような何か:

Interface *creatClass(class : Interface){ 
    return new class(); 
} 

EDIT:

template <class T> 
IFrame *creatClass(){ 
    return new T(); 
} 

void dfg(){ 
    IFrame *lol = creatClass<Button>(); 
} 

error C3206: 'creatClass' : invalid template argument for 'Dist_Frame', missing template argument list on class template 'Button' 

PS。 Buttonは継承しますIFrame

答えて

12

Template」と呼ばれています。

template <class T> 
T *creatClass(){ 
    return new T(); 
} 

あなたはこのようにそれを呼び出す必要があります:

template <class T> 
Interface *creatClass(){ 
    return new T(); 
} 

class InterfaceImpl : public Interface {...}; 
// ... 
InterfaceImpl *newImpl = creatClass<InterfaceImpl>(); 

はまた、あなたは唯一のInterfaceのインスタンスを作成確保するために、これを試すことができます

を編集しました

編集あなたの編集

に私は、このテストコードを試してみました:

#include <iostream> 
using namespace std; 

class IFrame{ 
    public: 
     virtual void Create() =0; 
}; 

class Button : public IFrame{ 
    public: 

     virtual void Create(){ cout << "In Button" << endl;}; 
}; 

template <class T> 
IFrame *creatClass(){ 
    return new T(); 
} 


int main() 
{ 
    IFrame *lol = creatClass<Button>(); 
    lol->Create(); 
} 

は期待どおりに動作します。あなたのクラス定義には他にもいくつかのコーディングエラーがあるはずです。それをデバッグして、それは元の質問とは関係ありません。

+0

編集をご覧ください – Vladp

+0

@vladp - それを見ました。 – littleadv

関連する問題