如果我有一个接口和许多实现此接口的类,我现在可以仅作为参数传递类的类型而不是对象吗?
类似的东西:
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
答案 0 :(得分:15)
它被称为“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();
}
完全按预期工作。您的类定义中必须存在其他一些编码错误。调试它,它与你原来的问题无关。