给出模板类:
template<class T>
class Foo
{
public:
void FunctionThatCreatesT()
{
_object = new T;
}
private:
shared_ptr<T> _object;
}
是否有可能以某种方式将一组构造函数参数传递给T到Foo(可能在构造Foo时),以便Foo在创建T时可以使用它们?只有C ++ 11的解决方案很好(例如,可变参数在桌子上)。
答案 0 :(得分:3)
确切地说,可变参数模板和通过std::forward
完美转发。
#include <memory>
#include <utility>
template<class T>
class Foo
{
public:
template<class... Args>
void FunctionThatCreatesT(Args&&... args)
{
_object = new T(std::forward<Args>(args)...);
}
private:
std::shared_ptr<T> _object;
}
有关其工作原理的列表,请参阅this excellent answer。
你可以在C ++ 03中使用许多重载函数来模拟它的有限版本,但是......它是一个PITA。
此外,这仅来自内存,因此未进行任何测试。可能包含一个错误的错误。