C ++模板类,用于创建其他类的实例

时间:2012-08-24 07:57:13

标签: c++ templates

我是C ++的新手,我不知道模板类,但我想我可以使用模板来解决我的问题。我有两个班,

class Foo
{
 public:
    Foo (int a, char b);
};

class Bar
{
 public:
    Bar (int a);
};

这些课程彼此无关。

我的问题是,是否可以创建模板类来创建FooBar的实例?可以像这样使用的东西:

TemplateClass<Foo>::createClass();

但我不确定参数。

2 个答案:

答案 0 :(得分:4)

您可以使用C ++ 11。

template<typename T>
class TemplateClass
{
public:
   template<class... Args>
   static T createClass(Args&&... args)
   {
      return T(std::forward<Args>(args)...);
   }
};

Foo f = TemplateClass<Foo>::createClass(1, '1');
Bar b = TemplateClass<Bar>::createClass(1);

或者使用C ++ 03使用不同的重载。

template<typename T>
class TemplateClass
{
public:
   static T createClass()
   {
      return T();
   }
   template<typename Arg1>
   static T createClass(const Arg1& arg)
   {
      return T(arg);
   }
   template<typename Arg1, typename Arg2>
   static T createClass(const Arg1& arg1, const Arg2& arg2)
   {
      return T(arg1, arg2);
   }
};

等等......

答案 1 :(得分:2)

构造函数不是正常函数,因此不能轻易地与bind或其他功能机制一起使用。正如ForEver所示,使用C ++ 11编写具有有限功能的包装器很容易,但是如果没有C ++ 11并且需要的不仅仅是基本功能,这可能会变得棘手。您可以使用Boost.Factory