使用纯右值创建 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
来保存输入。
我有一个 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
来保存输入。