我是 C++ 新手,我不知道模板类,但我想我可以使用模板来解决我的问题。我有两节课,
class Foo
{
public:
Foo (int a, char b);
};
class Bar
{
public:
Bar (int a);
};
并且这些类彼此不相关。
我的问题是,是否可以创建一个模板类来创建Foo
and的实例Bar
?可以这样使用的东西:
TemplateClass<Foo>::createClass();
但我不确定参数。
您可以为此使用 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);
}
};
等等...
构造函数不是普通函数,因此不能bind
轻松地与其他函数机制一起使用。正如 ForEver 所示,使用 C++11 编写功能有限的包装器很容易,但是如果没有 C++11 并且当您需要的不仅仅是基本功能时,这可能会变得很棘手。您可以为此使用Boost.Factory。