使用纯右值创建 shared_pointer

Using a prvalue to create a shared_pointer

我有一个 class functionCombiner,其构造函数如下所示

FunctionCombiner::FunctionCombiner(std::vector<std::shared_ptr<valuationFunction>> Inner_) : Inner(std::move(Inner_)), valuationFunction("", 0) //<- Needs to initalize itself even though it gets all data from inner functions.
{
}

在我的主 class 中,我这样称呼它:

vector<std::shared_ptr<valuationFunction>> combinedStillFrontFunctions{ stillFrontStock, stillFrontEuropeanCall };
std::shared_ptr<valuationFunction> StillFrontFunctions = std::make_shared<FunctionCombiner>(combinedStillFrontFunctions);

我希望能够通过像这样就地构建它来将其减少到一行

std::shared_ptr<valuationFunction> StillFrontFunctions = std::make_shared<FunctionCombiner>({ stillFrontStock, stillFrontEuropeanCall });

编译器不喜欢。有没有办法使这项工作?这显然有效:

FunctionCombiner StillFrontFunctions({ stillFrontStock, stillFrontEuropeanCall });

但我需要它是一个共享指针。

(缩短一些名称以使示例可读 w/o 水平滚动条。您应该考虑这样做...)

{x,y} 传递给 make_shared() 试图转发一个大括号括起来的初始化列表,不是初始化共享指针中的值,而是初始化其构造函数采用的临时对象。它不是可以转发的东西,因为它本身不是完整的表达。所以用这些值创建一个临时向量:

... = make_shared<FunComb>(vector<shared_ptr<valFun>>{FS, FEC});

另一种方法可能是将 FunComb 的构造函数更改为(或添加新的)可变参数构造函数,从而无需传入 vector 来保存输入。