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将适合存储项目类,但是你不能够任何有用的事情,如果你不知道它的类型呢.
标准 C++ 中不存在这样的东西。考虑结构或类的实际工作方式:
struct MyStruct {
int a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
假设 an 的int大小为 32 位,则MyStruct's的位置b始终与 的位置相距 4 个字节a。该偏移算术由编译器预先处理。这就是 C 访问成员数据如此之快的原因:没有运行时查找!
所以如果我想"b"在运行时查找,我必须找到它在结构中的位置。为此,编译器必须生成一个偏移量表来存储在代码中的某处。对于一种没有任何隐藏的低效率的语言来说,这是很多开销。
| 归档时间: |
|
| 查看次数: |
1971 次 |
| 最近记录: |