我是C ++的新手,我不知道模板类,但我想我可以使用模板来解决我的问题。我有两个班,
class Foo
{
public:
Foo (int a, char b);
};
class Bar
{
public:
Bar (int a);
};
这些课程彼此无关。
我的问题是,是否可以创建模板类来创建Foo
和Bar
的实例?可以像这样使用的东西:
TemplateClass<Foo>::createClass();
但我不确定参数。
答案 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。