2011-10-24 81 views
5

如果我有一个接口和许多类来实现这个接口,我现在可以作为参数只传递类的类型而不是对象吗?C++类类型作为参数

是这样的:

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

编辑:

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(); 
} 

你必须这样调用它:

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

编辑

你也可以试试这个,以确保您只创建Interface实例:

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

编辑您的编辑

我想这个测试代码:

#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