【问题标题】:"Variable" variable names c++“变量”变量名称c ++
【发布时间】:2015-08-08 02:16:03
【问题描述】:

问题: 我在这里搜索了一段时间,寻找一种方法来循环遍历命名为variable_1variable_2、....、variable_n 的变量。基本上,我在问是否有办法使用循环来实现variable_i,或者更具体地说,在我的情况下,functionName_i

我需要什么:我正在尝试循环一个对象的数组来调用不同的函数,这些函数按顺序命名并与对象的数组平行(即:obj[ i ]->callback_i ( ) )

我知道的:显然,这里的答案(如果只是变量)是使用数组或向量。但是,如果可能的话,我需要以某种方式按顺序连接函数的名称。

可能的解决方法:我想到的一切都可以追溯到创建函数指针的数组/向量。如果我真的别无选择,我可能最终会让它发挥作用,但我只是想出于好奇而问。

明确的问题:有没有办法使用变量 int i 作为函数名称的一部分来循环按顺序命名的函数?

谢谢!

【问题讨论】:

  • 没有。使用函数指针数组。
  • 要做你想做的事,需要使用反射,这是 C 中通常不支持的功能。
  • 您可以根据您的系统执行此操作。例如,如果您在 Windows 上,您可以将函数放在 extern "C" 块中,并使用 __declspec(dllexport) 导出它们,然后按名称(使用运行时字符串值)将它们加载到带有 @987654321 的函数指针中@。我想你可以在 Linux 或 Mac 上做类似的事情,但我不知道这个过程。
  • 您可以将函数与“运行时名称”相关联,例如 std::map<std::string, std::function<void()>>?
  • @Galik 您的意思是将函数的名称存储为键并将其指针存储为值?这根本不是一个坏主意,实际上......它仍然存储函数的指针和所有内容,但这是一种非常巧妙的方式

标签: c++ arrays reflection concatenation


【解决方案1】:

没有。

C++ 通常不在运行时存储类型或变量名信息;如果是这样,它就不是可移植的(typeid() 确实因编译器而异),或者根本不可能。你不能在运行时引用变量名,除非你让一个系统来做那种事情,或者你使用调试信息,这不是标准的 C++ 特性。

这种类型的反射很昂贵,更适合高级语言。 C++,作为一种更底层的语言,去掉了糖,只是告诉你“不”。

如果你制作了一个命名系统,你可以在 C++ 中制作这种类型的东西,但是一个通用的也需要变体,NULL/Maybe 成语的一个版本,属性,检查,大量的调试,你可以做到这一切如果你愿意,但在这里你不妨切换到另一种已经有你正在寻找的答案的语言并将 C++ 绑定到它。

或者,使用矩阵或函数数组。然后,按索引迭代。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多