c++ - 根据函数名匹配在运行时调用函数

标签 c++ c++11

提前道歉可能含糊的标题,这是我能想到的最好的。

我有以下 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/

相关文章:

c++ - Coin-or-CBC 求解器性能 : command line utility vs. 编译的 c++ 程序

lambda - 用于传递成员函数的 C++0x lambda 包装器与绑定(bind)

c++ - 如何在Vxworks中正确运行Clock-gettime获取准确时间

c++ - 为什么在使用多重继承时不同的 `this` 地址

c++ - 分布在 -DBL_MAX 和 DBL_MAX 之间的随机 double

c++ - 尝试使用参数包绑定(bind) std::function 时获取未声明的参数

c - 如何让 clang 忽略 c-c++ 不兼容错误?

c++ - 关键字 "virtual"是否传递给中间基类?

c++11正则表达式比python慢

c++ - 深拷贝与浅拷贝