新T(x,y,z)作为函数

时间:2013-07-06 20:59:37

标签: c++ stl

我有一些想要一个函数指针的代码,但我需要用它来调用它 做“新T(x,y,z)”。

我可以写一个函数:

template<T, X, Y, Z>
T* Construct(X x, Y y, Z z) {
   return new T(x, y, z);
}

但是我想知道STL中是否存在这样的事情,因为我需要对可变数量的参数执行此操作,这需要重复上述,例如10次,每次参数数量一次,我想要避免在头文件中添加太多样板文件。

2 个答案:

答案 0 :(得分:3)

在C ++ 11中,您可以使用可变参数模板:

template<typename T, typename... Args>
T* Construct(Args&&... args)
{
    return new T(std::forward<Args>(args)...);
}

另外,考虑一下你是否真的要返回一个原始指针而不是一个智能指针(例如,unique_ptr。除非你做的是低级别的东西,否则在Modern C ++中不鼓励使用拥有原始指针

答案 1 :(得分:3)

我相信这就是标准分配器的作用:

#include <memory>

std::allocator<T> alloc;

T * p = alloc.allocate(1);
alloc.construct(p, x, y, z);