C++相当于Python的getattr

ulu*_*lu5 4 c++ python serialization boost getattr

在python中,有一个名为getattr的函数,它看起来像这样:

class MyObject():
    def __init__(self):
        self.xyz = 4

obj = MyObject()
getattr(obj, 'xyz')
Run Code Online (Sandbox Code Playgroud)

对getattr的调用将返回4.

在C++(非Visual C++)中有类似的方法吗?

是否有任何具有此功能的库我可以使用字符串查找对象的成员变量?

我试图找到一种方法来查找我无法更改的C++类中的公共数据成员.所以我不能使用地图将字符串文字映射到值.也许像宏的'unstringify'?

Mat*_* M. 12

你要求的通常被称为内省.

C++语言本身不支持内省.你可以模仿它,但这就是它的范围.

您建议的API中还有另一个问题:您将如何制定方法的返回类型?有一个boost::any将适合存储项目类,但是你不能够任何有用的事情,如果你不知道它的类型呢.


chr*_*ock 5

标准 C++ 中不存在这样的东西。考虑结构或类的实际工作方式:

struct MyStruct {
  int a;
  int b;
};
Run Code Online (Sandbox Code Playgroud)

假设 an 的int大小为 32 位,则MyStruct's的位置b始终与 的位置相距 4 个字节a。该偏移算术由编译器预先处理。这就是 C 访问成员数据如此之快的原因:没有运行时查找!

所以如果我想"b"在运行时查找,我必须找到它在结构中的位置。为此,编译器必须生成一个偏移量表来存储在代码中的某处。对于一种没有任何隐藏的低效率的语言来说,这是很多开销。