我正在用 C++ 开发一种脚本语言,它使用解释器中“内置”的函数。我正在使用以下构造将函数名称映射到它们各自的指针:
typedef void(*BuiltInFunction)(Context*);
typedef std::unordered_map<std::string, BuiltInFunction> BuiltinFunctionsMap;
Context
自定义类在哪里。
然后我有这样的函数声明:
namespace BuiltIns {
void _f_print(Context* context);
void _f_error(Context* context);
void _f_readline(Context* context);
void _f_read(Context* context);
void _f_readchar(Context* context);
void _f_eof(Context* context);
...
}
最后是一个用实际指针填充地图的例程:
BuiltinFunctionsMap BuiltIns::populateFunctions() {
BuiltinFunctionsMap funcMap;
// Standard I/0
funcMap["print"] = &BuiltIns::_f_print;
funcMap["error"] = &BuiltIns::_f_error;
funcMap["readline"] = &BuiltIns::_f_readline;
funcMap["read"] = &BuiltIns::_f_read;
funcMap["readchar"] = &BuiltIns::_f_readchar;
funcMap["eof"] = &BuiltIns::_f_eof;
...
return funcMap;
}
我要问的是是否有一种方法可以使用模板或类似的东西从函数声明中自动生成填充函数。目前,我正在使用正则表达式,这很简单,但是每当我添加新函数时我都必须这样做,而且很麻烦。