我有一些与此类似的代码
enum Days
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
};
typedef void (*DailyFunction)(int);
namespace DailyFunctions
{
void monday(int SomeData);
void tuesday(int SomeData);
void wednesday(int SomeData);
void thursday(int SomeData);
void friday(int SomeData);
void saturday(int SomeData);
void sunday(int SomeData);
}
和我的代码中的其他一些我使用switch语句将一个DailyFunction分配给DailyFunction ptr。 当我第三次输入(或多或少)相同的开关语句时,我有了想法,有一张地图会很棒
std::map<Days, DailyFunction> MyPhonebookMap
这将允许我做这样的事情:
DailyFunction Function_ptr = MyPhonebookMap[WeekDay];
对我而言,似乎定义这样一个地图的最佳位置将在函数声明
下的名称空间DailyFunctions中但是我如何在那里定义一个const map(因为它不应该改变)并同时填充它?
答案 0 :(得分:1)
您可以使用提升功能boost::assign::map_list_of
或使用复制构造函数从已构建的const map
初始化map
:
#include <map>
int main()
{
std::map<Days, DailyFunction> m;
m[ MONDAY] = &monday;
//... initialize m entries
std::map<Days, DailyFunction> const mc( m);
//...
return 0;
}
答案 1 :(得分:0)
在您的情况下,可以使用简单的数组而不是地图。你可以拥有const数组的初始化器,而且它可以更快地工作。
DailyFunction funcs[] = {monday, tuesday, wednesday, thursday, friday, satureday, sunday};
或者,如果您使用C ++ 11,则可以使用启动器列表,如此处所述Initializing a static std::map<int, int> in C++