0

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

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

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

并且这些类彼此不相关。

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

TemplateClass<Foo>::createClass();

但我不确定参数。

4

2 回答 2

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);
   }
};

等等...

于 2012-08-24T08:02:43.590 回答
2

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

于 2012-08-24T08:10:34.190 回答