用60k 条目初始化类静态图
Initialize class static map with 60K+ entries
我有一个类似的类:
class AntennaController
{
public:
static map<uint16_t, uint64_t> channel_to_freq;
static map<uint64_t, uint16_t> freq_to_channel;
};
这两个地图将传输频率转换为通道,反之亦然(即140000000 -> 4
,4 -> 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文件。
相关文章:
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 静态初始化的反义词是什么?
- 在静态初始化期间运行代码
- 结构数组的嵌入式C++静态初始化
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 使用 constexpr 和 std::array 进行静态初始化来替换动态初始化的 std::vector 的闰年
- MSVC 2017 在单个翻译单元中违反静态初始化顺序
- VC++6 线程安全静态初始化
- 具有必要副作用的静态初始化被优化掉了
- 未使用全球的静态初始化器
- w/ w/结构带char缓冲液的静态初始化[]
- 静态初始化的对象不能放在块中尝试
- 功能指针的静态初始化
- lambda(或函数)C++中的静态初始化
- C++静态初始化顺序:添加到映射中
- 复杂类型数组的静态初始化
- C++ - 在派生类中静态初始化受基类保护的成员变量
- 静态初始化插件工厂
- 静态初始化包含功能指针的对象的constexpr std ::数组
- 找出静态初始化是否结束