我有一些需要函数指针的代码,但我需要用“new 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)...);
}
另外,请考虑您是否真的想要返回原始指针而不是智能指针(例如,a unique_ptr
。除非您正在做低级的事情,否则在现代 C++ 中不鼓励使用拥有原始指针。
我相信这是标准分配器所做的:
#include <memory>
std::allocator<T> alloc;
T * p = alloc.allocate(1);
alloc.construct(p, x, y, z);