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

new T(x, y, z) as a function

本文关键字:函数      更新时间:2023-10-16

我有一些代码想要一个函数指针,但我需要用做"新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次,对每个数量的参数重复一次,并且我希望避免在头文件中添加太多样板文件。

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

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

此外,请考虑您是否真的想返回原始指针而不是智能指针(例如,unique_ptr)。除非您在做低级工作,否则在现代C++中不鼓励使用拥有的原始指针。

我相信这就是标准分配器所做的:

#include <memory>
std::allocator<T> alloc;
T * p = alloc.allocate(1);
alloc.construct(p, x, y, z);