C++ 类类型作为参数

Posted

技术标签:

【中文标题】C++ 类类型作为参数【英文标题】:C++ class type as argument 【发布时间】: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

【问题讨论】:

【参考方案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();

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

【讨论】:

以上是关于C++ 类类型作为参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将使用参数包和类型名的类作为函数的输入参数(c++)

c++ 模板

C++模板非类型模板参数

C++ 模板(进阶)

C++模板进阶

C++——模板进阶