【问题标题】:parsing a C structure in C++在 C++ 中解析 C 结构
【发布时间】:2015-12-24 11:21:54
【问题描述】:

我正在寻找一种方法来解析 C 结构以获得变量的名称和类型。

例如我有这样的结构:

struct MyStruct {
  int anInt ; 
  float aFloat ; 
}

我需要获取类型 int 和 float 以及 2 个字符串“anInt”和“aFloat”。

在我必须在另一个函数中使用这些值之后:

addValue<int>("anInt") ; 
add Value<float>("aFloat") ; 

您知道如何在编译时自动执行此操作吗?

谢谢。

【问题讨论】:

  • 如果你想解析一个包含结构的文本文件,这可以在运行时完成——搜索 C 解析器。如果您想在代码中执行此操作(将定义动态转换为另一个定义),您需要的是反射和运行时类型信息,它们在 C++ 中“不太好”(参见:en.wikibooks.org/wiki/C%2B%2B_Programming/RTTI)。
  • 你到底为什么要问?你已经有多少结构了?请编辑您的问题以激发它并提供更多详细信息
  • 这里缺少很多上下文,但是假设您控制原始结构,我将使用诸如 boost fusion 之类的库来声明原始结构。这使用宏来提供您正在寻找的功能。

标签: c++ metaprogramming template-meta-programming


【解决方案1】:

使用标准 C++11 模板代码可能无法做到这一点。

您可以考虑自定义您的 C++ 编译器来获取此类信息。例如,如果使用最近的 GCC 编译代码,您可以考虑使用 MELT 扩展对其进行自定义(MELT 是一种特定于域的语言,由插件实现,用于自定义 GCC)。您需要了解 GCC 内部表示的详细信息(因此这样的扩展可能需要一周或更长时间)。

Qt MOC facility 可能有用或鼓舞人心。它正在解析有限形式的class 声明。

或者,您可以考虑从其他输入生成 C++ structclass 表示;例如更改您的构建过程,可能是您的Makefile,以从您的更高级别表示生成一些.h 头文件(可能还有一些.cc C++ 翻译单元)。

【讨论】:

  • 感谢您的回答,对我迟到的回复感到抱歉。我在开发中使用 Qt,所以它可能是一个很好的解决方案。我正在查看 QMetaObject 类,但我不清楚如何进行。你有一个可以帮助我的例子吗?我继续阅读有关 Qt MOC 的内容...谢谢
猜你喜欢
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 2010-12-23
  • 2023-03-23
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多