2013-05-14 57 views
3

在C有自省技术++像那些在Python?C++自省技术,类似蟒蛇

例如:我想获取有关特定对象的详细信息,而无需通过头文件会或再参考CPP参考。

我要求一个适当的问题,或搬到这里错了方向?

更新:

基于下面的答案,这个答案是有关我的问题:How can I add reflection to a C++ application?

+0

你是指反射? https://www.google.com/search?q=reflection+in+c%2B%2B – 2013-05-14 17:43:10

+0

我不知道有关反思,可能是这样..我从这个角度来谈论:存在能够遍历一个类型的成员,枚举它的方法,属性等等。 – securecurve 2013-05-14 17:47:08

+1

一般为“否”。 C++的标准编译模型意味着基本没有任何类型特征保留在编译的机器代码中,因此它们在运行时不可检查。 – 2013-05-14 17:50:12

回答

0

C++有一个内置的RTTI系统,虽然它的大部分可怕的一文不值。结果使用自定义反省。

反思在C++中实现有两个主要方法:preprocesing步骤,其中在扫描cpp文件并创建数据库/生成CPP代码;使用模板。我写了一些关于模板技术here的文章。

如果你对使用自省而不是实现它更感兴趣,我建议查找clReflect,或者你可以试试cpfg

+0

它似乎是不够直接作为蟒蛇..我需要考虑你上面提到的东西..谢谢! – securecurve 2013-05-14 17:55:13

+2

@securecurve是的,这很难,因为它不受语言本身的支持。 – RandyGaul 2013-05-14 17:55:38

+0

使用IDE可以更有帮助吗?由于对象的手动调查将比头疼得多。如果您知道一个或多个支持交叉点的IDE(无论底层技术如何),请让我知道...谢谢! – securecurve 2013-05-15 00:10:47

2

Python和C++是完全不同的语言。通常, 编译完成后,几乎所有的类型信息都会丢失。所有你能做的就是问,如果一个对象是 一个特定的类(使用typeid),或者如果它是 一个特定的类的实例(使用dynamic_cast)。从理论上讲, 也可以使用typeid::name()得到类型的名称,但在 的练习中,该标准并没有对 的返回值施加任何有用的东西,并且某些编译器(例如g ++)不会给你任何东西 有用。