1

我有一些需要函数指针的代码,但我需要用“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 次,每个参数数量一次,我想避免添加头文件有这么多样板。

4

2 回答 2

3

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

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

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

于 2013-07-06T21:01:06.930 回答
3

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

#include <memory>

std::allocator<T> alloc;

T * p = alloc.allocate(1);
alloc.construct(p, x, y, z);
于 2013-07-06T21:08:08.613 回答