用60k 条目初始化类静态图

Initialize class static map with 60K+ entries

本文关键字:静态 初始化 60k      更新时间:2023-10-16

我有一个类似的类:

class AntennaController
{
    public:
        static map<uint16_t, uint64_t> channel_to_freq;
        static map<uint64_t, uint16_t> freq_to_channel;
};

这两个地图将传输频率转换为通道,反之亦然(即140000000 -> 44 -> 140000000(。有65536个不同的通道。

所以我的问题是:有没有一种方法可以初始化这些静态成员,而无需手动列出每个地图的所有65536键值对(即使用for loop(?

,如果我不使用静态图,以便可以在构造函数中初始化它,那么每个实例都不会有自己的副本?

有几个选项。您可以使用for loop编写静态功能为班级构建地图并返回地图。然后,您可以像

一样初始化类成员
// header file
class AntennaController
{
    public:
        static map<uint16_t, uint64_t> channel_to_freq;
        static map<uint64_t, uint16_t> freq_to_channel;
        map<uint64_t, uint16_t> build_channel_to_freq { /* code here */ }
        map<uint64_t, uint16_t> build_freq_to_channel { /* code here */ }
};
//cpp file
AntennaController::map<uint16_t, uint64_t> channel_to_freq = build_channel_to_freq();
AntennaController::map<uint64_t, uint16_t> freq_to_channel = build_freq_to_channel();

您还可以编写一个为您构建Initlaizer列表的脚本/程序,然后您可以将该文件包含在您的代码库中。您可以生成列表,然后执行

之类的事情
AntennaController::map<uint16_t, uint64_t> channel_to_freq { #include "channel_to_freq_list.h" }
AntennaController::map<uint16_t, uint64_t> freq_to_channel { #include "freq_to_channel_list.h" }

,或者您可以将其构建整个内容,然后输出一个可以添加到项目的CPP文件。