一组结构化绑定错误,属于神经网络

Group of structured binding errors, pertains to neural networking

所以我下载了一个多年未使用的库,用于神经进化增强拓扑。基本上,一个进化的神经网络。它带有许多开箱即用的错误(大约 20-30 个错误),我设法修复了所有错误,除了这些:

错误 C3694 结构化绑定声明不能包含除 'static'、'thread_local'、'auto' 和 cv-qualifiers

以外的说明符

错误(活动)E2828 类型“float”没有要绑定的组件

错误(活动)E0413 不存在从“const std::tuple”到“float”的合适的转换函数 //this is dataset

错误(活动)E2825 结构化绑定声明的说明符无效

这是错误所在的代码:


const int x1 = 1;
const int x2 = 2;
const int y = 1;

static constexpr int NumInput = 2;
static constexpr int NumOutput = 1;
static constexpr bool Bias = true;
static constexpr float ThresholdFitness = 0.80f;
static constexpr std::size_t PopulationSize = 100;
using ParamConfig = EvolutionNet::DefaultParamConfig;
using EvolutionNetT = EvolutionNet::EvolutionNet<NumInput, NumOutput, Bias, ParamConfig>;
using Network = EvolutionNetT::NetworkT;
using FitnessScore = EvolutionNet::FitnessScore;



for (float&& [x1, x2, y] : dataset) { // const auto, where all the errors are
                network->setInputValue(0, x1);
                network->setInputValue(1, x2);

                network->feedForward<ParamConfig>();

                const float output = network->getOutputValue(0);
                assert(output >= 0.f && output <= 1.f);

                score += 1.f - (std::abs(output - y));
            }

我对结构化绑定一无所知,我只是想在其他项目中使用一些神经网络。这件事不是最好的记录,但我相信 这只是一个 for each 循环,除非结构化绑定与此有关。如何解决这些错误?谢谢。

正如错误消息所说,在结构化绑定中只允许使用 auto 类型说明符(和 cv-qualifiers),因此请将 float&& 替换为 auto&&

如果您对这种语法感到不舒服,则不需要使用它。它是纯粹的语法糖。您可以使用 std::get 访问 std::tuple 的各个元素的值,例如:

for(auto entry : dataset) {
    auto x1 = std::get<0>(entry);
    auto x2 = std::get<1>(entry);
    auto y = std::get<2>(entry);
    //...
}

或者如果您愿意,您可以写出类型而不是 auto。如果您想要引用元组中的元素而不仅仅是它们的值,请在适当的地方添加 &&/&/const