初始化向量元素而不调用初始化函数

问题描述 投票:0回答:1

我有:

enum ID
std::vector<BlockData> DATA

用于抽象索引的枚举。 以及包含每个索引信息的数据。

应该可以执行以下操作:DATA[ID::AIR]

每个

DATA
元素都是常量,并且在编译时已知

class BlockData {
public:
    int someData;
    BlockData() = default;
    explicit BlockData(int someData) : someData(someData) {};
};

namespace Blocks {
    enum ID {
        AIR = 0,
        DIRT = 1,
    };
    std::vector<BlockData> DATA(2);

    void init() {
        Blocks::DATA[Blocks::ID::AIR] = BlockData{32};
        Blocks::DATA[Blocks::ID::DIRT] = BlockData{6};
    }
}

我可以直接初始化

DATA
向量内联,例如:
std::vector<BlockData> DATA(block1data, block2data);

但我想使用枚举来分配它们,以提高可读性,就像我在代码中所做的那样。问题是它需要一些初始化函数。是否可以在不调用初始化函数的情况下做到这一点?理想情况下,命名空间中不会出现与初始化相关的函数和其他数据。

c++ enums initialization
1个回答
0
投票

我会使用内联 lambda 调用来避免将

init()
传播到命名空间之外:

namespace Blocks {
    enum ID {
        AIR = 0,
        DIRT = 1,
    };
    auto DATA = [] {
        std::vector<BlockData> DATA(2);
        DATA[Blocks::ID::AIR] = BlockData{32};
        DATA[Blocks::ID::DIRT] = BlockData{6};
        return DATA;
    }();
}
© www.soinside.com 2019 - 2024. All rights reserved.