C ++类类型作为参数

时间:2011-10-24 18:34:27

标签: c++ class interface arguments

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

类似的东西:

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

1 个答案:

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

完全按预期工作。您的类定义中必须存在其他一些编码错误。调试它,它与你原来的问题无关。