模板类型构造函数参数

时间:2011-09-23 22:41:48

标签: c++ templates

给出模板类:

template<class T>
class Foo
{
public:
    void FunctionThatCreatesT()
    {
        _object = new T;
    }
private:
    shared_ptr<T> _object;
}

是否有可能以某种方式将一组构造函数参数传递给T到Foo(可能在构造Foo时),以便Foo在创建T时可以使用它们?只有C ++ 11的解决方案很好(例如,可变参数在桌子上)。

1 个答案:

答案 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。

此外,这仅来自内存,因此未进行任何测试。可能包含一个错误的错误。