【发布时间】:2013-05-10 14:48:27
【问题描述】:
是否可以在运行时获取某个命名空间中的函数列表或程序中的所有函数?
我有一个函数指针映射,我需要自己添加命令,但我想:为什么不创建一个命名空间,让程序在运行时完成工作?
类似(伪代码):
typedef bool (*command)(void);
namespace Commands
{
bool Start(void)
{
return true;
}
bool End(void)
{
return true;
}
};
std::map<std::string,command> CommandMap;
main()
{
for(each function in namespace Commands)
{
CommandMap[std::string(function_name)] = function;
}
CommandMap["Start"]();
CommandMap["End"]();
return 0;
}
而不是
std::map<std::string,command> CommandMap;
main()
{
CommandMap["Start"] = Commands::Start;
CommandMap["End"] = Commands::End;
//list of thousands of other commands......
CommandMap["Start"]();
CommandMap["End"]();
return 0;
}
这可以在 C++ 或 C++11 中实现吗?或者我的目标的任何替代方案?
【问题讨论】:
-
C++没有反射机制。
-
我不知道你的意图,但似乎开关比地图更好。
-
不是每个函数都需要有相同的参数和返回类型吗?
-
是的,每个函数都有相同的参数和返回类型
-
将每个命令视为命令类型的派生类。如果每个派生类型都有一个静态实例化,那么它的构造函数可以将它注册到一个单例 CommandCollection 类或类似的东西,这样可以保留列表。
标签: c++ function c++11 runtime function-pointers