You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从FunctionCombiner类返回内部估值函数的引用向量?

解决返回内部valuationFunction引用集合的编译问题

首先得明确:C++标准容器(比如std::vector)不能直接存储引用,因为引用不支持默认构造和赋值操作,这是容器元素的必备要求。所以你改用std::reference_wrapper是完全正确的思路,但你的实现里有两个关键错误导致编译失败:

你的代码里的核心问题

1. StockPriceFunction::GetInnerReference的错误

看这段代码:

std::vector<std::reference_wrapper<valuationFunction>> StockPriceFunction::GetInnerReference() {
    std::vector<std::reference_wrapper<valuationFunction>> innerVector(1);
    innerVector.push_back(std::ref(*this));
    return innerVector;
}

innerVector(1)会尝试创建一个包含**1个默认构造的std::reference_wrapper**的容器,但std::reference_wrapper是不能默认构造的——它必须从一开始就绑定到一个有效的对象。这行代码直接触发编译错误,而且就算能编译,最后你的vector会有2个元素,第一个还是无效的。

2. FunctionCombiner::GetInnerReference的错误

同样的问题:

std::vector<std::reference_wrapper<valuationFunction>> FunctionCombiner::GetInnerReference() {
    std::vector<std::reference_wrapper<valuationFunction>> innerVector(Inner.size());
    // ... 后续插入逻辑
}

innerVector(Inner.size())试图创建Inner.size()个默认构造的reference_wrapper,这同样违反了reference_wrapper的构造规则,直接导致编译失败。

修正后的正确实现

对于StockPriceFunction

直接创建空容器,再添加有效引用,或者用初始化列表更简洁:

std::vector<std::reference_wrapper<valuationFunction>> StockPriceFunction::GetInnerReference() {
    // 方式1:空容器+push_back
    std::vector<std::reference_wrapper<valuationFunction>> innerVector;
    innerVector.push_back(std::ref(*this));
    return innerVector;

    // 方式2:直接用初始化列表(更简洁)
    // return {std::ref(*this)};
}

对于FunctionCombiner

不要预先分配容器大小,直接创建空容器,遍历Inner集合时把每个子函数的引用列表插入进来:

std::vector<std::reference_wrapper<valuationFunction>> FunctionCombiner::GetInnerReference() {
    std::vector<std::reference_wrapper<valuationFunction>> innerVector;
    // 用范围for循环更清晰,避免索引错误
    for (const auto& func_ptr : Inner) {
        auto sub_func_references = func_ptr->GetInnerReference();
        innerVector.insert(innerVector.end(), sub_func_references.begin(), sub_func_references.end());
    }
    return innerVector;
}

额外注意点

  • 确保所有通过reference_wrapper引用的对象生命周期足够长,不要返回指向临时对象的引用,否则会出现悬垂引用导致未定义行为。
  • 如果需要支持const场景,可以额外实现一个const版本的GetInnerReference,返回std::vector<std::reference_wrapper<const valuationFunction>>。

内容的提问来源于stack exchange,提问作者Oscar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:57:54