我有一个这样的课程:
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循环)?
如果我不使用静态地图以便我可以在构造函数中初始化它,那么每个实例都不会有自己的副本吗?
答案 0 :(得分:1)
有几种选择。您可以为类编写静态函数,使用for循环构建映射并返回映射。然后,您可以使用该函数初始化类成员,如
// 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();
您还可以编写一个脚本/程序来为您构建一个初始化列表,然后您可以将该文件包含在您的代码库中。您可以生成列表,然后执行类似
的操作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文件。