Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 作为函数的新T(x,y,z)_C++_Stl - Fatal编程技术网

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

C++ 作为函数的新T(x,y,z),c++,stl,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); } 模板 T*构造(X,Y,Z){ 返回新的T(x,y,z); } 但是我想知道STL中是否已经存在这样的东西,因为我需要对可变数量的参数执行此操作,并且这需要重复上述操作,比如说,10次,每个参数一次,并且我希望避免在头文件中添

我有一些代码需要一个函数指针,但我需要用 是“新的T(x,y,z)”

我可以按照以下方式编写函数:

template<T, X, Y, Z>
T* Construct(X x, Y y, Z z) {
   return new T(x, y, z);
}
模板
T*构造(X,Y,Z){
返回新的T(x,y,z);
}

但是我想知道STL中是否已经存在这样的东西,因为我需要对可变数量的参数执行此操作,并且这需要重复上述操作,比如说,10次,每个参数一次,并且我希望避免在头文件中添加太多样板文件。

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

template<typename T, typename... Args>
T* Construct(Args&&... args)
{
    return new T(std::forward<Args>(args)...);
}
模板
T*构造(Args&&…Args)
{
返回新的T(标准::转发(参数)…);
}

也可以考虑是否真的要返回一个原始指针而不是一个智能指针(例如,<代码> UNQuyGOPTR < /C>)。除非你在做低级的东西,否则在现代C++中使用原始指针是不鼓励的。C++中的< /P> < P>可以使用可变的模板:

template<typename T, typename... Args>
T* Construct(Args&&... args)
{
    return new T(std::forward<Args>(args)...);
}
模板
T*构造(Args&&…Args)
{
返回新的T(标准::转发(参数)…);
}

也可以考虑是否真的要返回一个原始指针而不是一个智能指针(例如,<代码> UNQuyGOPTR < /C> >。除非你在做低级的东西,否则在现代C++中使用原始指针是不鼓励的。

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

#include <memory>

std::allocator<T> alloc;

T * p = alloc.allocate(1);
alloc.construct(p, x, y, z);
#包括
分配程序alloc;
T*p=分配分配(1);
alloc.construct(p,x,y,z);

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

#include <memory>

std::allocator<T> alloc;

T * p = alloc.allocate(1);
alloc.construct(p, x, y, z);
#包括
分配程序alloc;
T*p=分配分配(1);
alloc.construct(p,x,y,z);

当然还有,
return std::make(std::forward(args)…);
谢谢,这种方法很有效,但不是按照我预期的方式。我仍然很好奇STL中是否已经存在这个确切的函数。你的解决方案对我不太有效的原因是我(还没有)允许在我的代码库中使用可变模板。如果这个函数已经在STL中,我可以使用它。@ USER 2557021:那么你可能想考虑Kerrek的SoopReRe:克里斯的评论,我基本上想要一个类似MaxIOnLoad的东西,返回一个原始指针。我不能自己写,因为我不能使用可变模板直到它被批准。这个代码库。我知道,这是一个荒谬的问题:)也许我会等到他们被批准。@user2557021:或者写下这10个版本,并在可变模板被批准时用一个可变模板替换它们。客户端不必更改。当然,
返回std::make(std::forward(args)…)
谢谢,这种方法很有效,但不是我预期的方式。我仍然很好奇STL中是否已经存在这个确切的函数。你的解决方案对我不太有效的原因是我(还没有)允许在我的代码库中使用可变模板。如果这个函数已经在STL中,我可以使用它。@ USER 2557021:那么你可能想考虑Kerrek的SoopReRe:克里斯的评论,我基本上想要一个类似MaxIOnLoad的东西,返回一个原始指针。我不能自己写,因为我不能使用可变模板直到它被批准。这个代码库。我知道,这是一个荒谬的问题:)也许我会等到它们被批准。@user2557021:或者写下这10个版本,在可变模板被批准时用一个可变模板替换它们。客户不需要更换。谢谢。安迪的解决方案见我的评论。这是可行的,除了我需要一个函数来实现这一点,它必须是一个可变模板。我只能使用STL中已经存在的函数或方法。听起来好像没有。谢谢。安迪的解决方案见我的评论。这是可行的,除了我需要一个函数来实现这一点,它必须是一个可变模板。我只能使用STL中已经存在的函数或方法。听起来好像没有。