给定一个模板类:
template<class T>
class Foo
{
public:
void FunctionThatCreatesT()
{
_object = new T;
}
private:
shared_ptr<T> _object;
}
是否可以以某种方式将 T 的一组构造函数参数传递给 Foo(也许在构造 Foo 时),以便 Foo 在创建 T 时可以使用它们?仅限 C++11 的解决方案就可以了(例如,可变参数就在桌面上)。
最佳答案
正是如此,可变参数模板和通过 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。
此外,这只是凭内存,所以没有进行测试。可能包含相差一错误。
关于c++ - 模板类型构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535546/