代码之家  ›  专栏  ›  技术社区  ›  Rostys

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

  •  0
  • Rostys  · 技术社区  · 2 年前

    我有: enum ID 和 std::vector<BlockData> DATA

    枚举以抽象出索引。 和包含每个索引信息的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};
        }
    }
    

    我可以初始化 数据 矢量内联,如: std::vector<BlockData> DATA(block1data, block2data);

    但我想使用enum来分配它们,以提高可读性,就像我在代码中所做的那样。问题是它需要一些初始化功能。是否可以在不调用初始化函数的情况下执行此操作?理想情况下,不会在命名空间中乱丢与初始化相关的函数和其他数据。

    1 回复  |  直到 2 年前
        1
  •  1
  •   3CxEZiVlQ    2 年前

    我会使用内联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;
        }();
    }