【问题标题】:Variable Variable Name in C++C++ 中的变量变量名
【发布时间】:2014-08-19 13:23:34
【问题描述】:

对于 C++,请考虑以下伪代码:

int sampleFunction (int selector)
{
  int var_1 = ............ ;
  int var_2 = ............ ;

  return var_[selector];
}

最后一行相当于代码:

if (selector == 1)
{
  return var_1;
}
else if (selector == 2)
{
  return var_2;
}

但我需要在运行时使用另一个变量 (selector) 评估变量名称。 如何做到这一点?还有,C语言呢?

我通常使用 MATLAB 命令eval 来执行此操作。 此外,在 C# 中,这可以通过反射来实现。

【问题讨论】:

  • 为什么不首先将所有内容存储在数组中?也许您可以详细说明您最终想要实现的目标。这听起来像是一个 X-Y 问题。
  • @MatthiasB:X-Y 问题的根源几乎总是在现实世界中存在实际问题。 5 个标签暗示了一个理论问题,而不是 X-Y。
  • 所以问题是具体的,而且只是关于有类似var_XX 的选项,其中XX 是一个运行时变量?
  • 那么不,这在纯 C++ 中是不可能的。
  • @mafso: 或std::map.

标签: c# c++ c arrays matlab


【解决方案1】:

C++ 和 C 都是编译语言。变量名在运行时不存在。这让你的想法完全不可能。

C# 已编译,但反射程度有限。 Type 名称可用,但我不认为 variable 名称可用。所以你倒霉的原因基本上是一样的。

MATLAB 是解释型的,因此编译时和运行时没有区别,因此它有可用的变量名。代价是 MATLAB 很慢。

【讨论】:

  • 优秀的答案。你明白我的意思。谢谢你。您是否有任何证据表明我们不能在 C++ 中使用一些变通方法来做到这一点?
  • @HeshamEraqi:嗯,您已经发布了明显的解决方法。
【解决方案2】:
int sampleFunction (int selector)
{
    int var_[] = {1, 2};

    return var_[selector];
}

其中 1 和 2 分别是 var_1var_2 的值。

【讨论】:

  • 我不了解 C++,但声明数组 static 在 C 中是有益的。
  • @downhillFromHere:通常是错误的。并且只对旧编译器有益。
  • 谢谢。但是你误解了我的问题。我的第一段代码只是一个伪代码。 var_[selector] 不是数组。
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
相关资源
最近更新 更多