【问题标题】:C++ namespace elementsC++ 命名空间元素
【发布时间】:2013-08-12 03:10:10
【问题描述】:

我想获取命名空间元素的名称和值...我该怎么做? 我想列出名称和值(已编辑)

例子

namespace testns{
  int stuff=4;
};

int index=0;

get_element_name(testns,index);
get_element_value(testns,int,index);

【问题讨论】:

标签: c++ namespaces


【解决方案1】:

命名空间就是它在包装盒上所说的,一个命名空间。你可以在许多模块中拥有相同的命名空间,你怎么知道如何索引它们? 唯一的正确的顺序是什么?命名空间只是为了对元素进行分类,而不是神奇地让它们被索引。

C++ 没有任何反射工具(我假设这就是您要寻找的东西)。你必须手动说明你想要什么。

【讨论】:

  • 我需要一个函数,我不关心规则
  • “C++ 没有任何反射工具”。没有功能。
  • @Dresmor 如果你想要一个函数,你必须写一个。您还必须找到一个工具来解析 C++ 并生成包含数据或可链接目标文件的源代码。您所要求的对于标准 C++ 来说是不可能
【解决方案2】:

您尝试执行的操作称为反射,,而 C++ 没有任何语言级别的内置方法可以为您执行此操作。可以做的事情很少,例如在#define 中使用# 运算符,但随后您使用的是#defines,我敢打赌这不是您想要的。

您可以在功能上获得的最接近的东西是编写另一个程序,该程序读取您的源代码,挖掘命名空间信息,然后将其写入您可以在其他地方#include 的头文件。 GCC-XML extension 在这方面可能会有所帮助,因为它使用 G++ 前端来解析语言,然后将语法树输出为 XML,您可以使用任意数量的 XML DOM 解析器来读取它。

【讨论】:

    【解决方案3】:

    为了访问变量的东西,你这样做:

    //Setting
    testns::stuff = 10;
    
    //Getting
    int stuff_value = testsn::stuff;
    

    命名空间的目的是消除使用相似命名法的代码之间的歧义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      相关资源
      最近更新 更多