【问题标题】:C++ class type as argumentC++ 类类型作为参数
【发布时间】:2011-12-14 08:59:48
【问题描述】:

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

类似这样的:

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

【问题讨论】:

    标签: c++ class interface arguments


    【解决方案1】:

    它叫做“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();
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 2023-04-06
      • 2013-02-26
      • 1970-01-01
      相关资源
      最近更新 更多