我有一个这样的表:

static const float scalers[NUM_Categories] = { 0.f,   0.97f, 0.92f, 0.83f,
                                                 0.94f, 0.73f, 0.9f};

定义此的最干净的方法是什么?这是全局性的。

我在想类似的东西
static const float scalers[NUM_Categories] = { [Category_A] 0.f,
[Category_B] 0.97f, [Category_C] 0.92f, [Category_D] 0.83f,
                                                 [Category_E] 0.94f, [Category_F] 0.73f, [Category_G] 0.9f };

但是该iirc是非标准C语言。有问题的项目使用clang,gcc和msvc(作为C++)进行编译。是否有某种类似的方法可以一目了然地分辨出数组中的哪些值对应于哪些类别? (尽管将其保留为简单数组)

最佳答案

如果改用std::array,则可以使用一个函数对其进行初始化,在该函数中您可以一次指定一个元素。

constexpr auto init_scalers() -> std::array<float, NUM_Categories> {
    auto scalers = std::array<float, NUM_Categories>{};
    scalers[Category_A] = 0.f;
    scalers[Category_B] = 0.97f;
    return scalers;
}

static constexpr std::array<float, NUM_Categories> scalers = init_scalers();

Demo

您也可以使用lambda。
static constexpr std::array<float, NUM_Categories> scalers = []{
    auto scalers = std::array<float, NUM_Categories>{};
    scalers[Category_A] = 0.f;
    scalers[Category_B] = 0.97f;
    return scalers;
}();

Demo

关于c++ - C++干净的方法将ifloats表定义为数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62223771/

10-13 05:02