我有一些想要一个函数指针的代码,但我需要用它来调用它 做“新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次,每次参数数量一次,我想要避免在头文件中添加太多样板文件。
答案 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);