提前道歉可能含糊的标题,这是我能想到的最好的。
我有以下 C++ 和文本文件:
cpp文件:
class Test
{
int var1;
int var2;
public:
bool set_var1();
bool set_var1();
bool set(string var_name);
void process_file();
}
文本文件:
var1 value1
var2 value2
目标 - 在 process_file() 中,读取/解析文本文件,并为文件中的每个 varX 调用相应的 set_varX()。
一个选项,在函数 set() 中,将 var_name 与“var1”/“var2”/等进行比较,并且 调用相应的 set_varX()。我对这种方法有更多的问题 行被添加到文本文件中,代码变得...丑陋,带有长长的“if-else” set() 中的代码块。
另一种选择,创建静态 map “var1” set_var1() “var2”set_var2()
set() 将迭代 map ,并在字符串比较匹配时调用相应的 func_ptr。此选项需要维护 map 结构。
虽然我更喜欢第二个选项,但随着测试文件的增加,代码更改较少,还有其他选项吗?只是大声思考,在 set() 中,我能否采用字符串 var_name,并在 set_ 前面添加,然后调用 set_var_name(),基本上以某种方式避免字符串比较,这在上述两种情况下都已完成。我的直觉,在 C++ 中,这在运行时是不可能的
谢谢, 艾哈迈德。
最佳答案
听起来你在问反射,这不是 C++ 的特性,所以这是不可能的。正如您所指出的,有解决问题的方法,但所有这些都将涉及字符串名称到函数的映射,您必须自己构建/维护该映射。该语言不会为您做这些。
关于c++ - 根据函数名匹配在运行时调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887183/