C++ equivalent of Python getattr
C++ equivalent of Python getattr
在python中,有一个名为getattr的函数,它看起来像这样:
class MyObject():
def __init__(self):
self.xyz = 4
obj = MyObject()
getattr(obj, 'xyz')
其中对 getattr 的调用将返回 4。
在C++(非视觉C++)中是否有类似的方法?
是否有任何具有此功能的库,我可以在其中使用字符串查找对象的成员变量?
我正在尝试找到一种方法来查找我无法更改的C++类中的公共数据成员。所以我不能使用映射将字符串文字映射到值。也许就像用宏"取消字符串化"一样?
你所要求的通常被称为内省。
C++语言本身不支持内省。你可以模仿它,但这就是它的范围。
您提出的 API 中还有另一个问题:您将如何制定方法的返回类型?有一个适合存储该项目的boost::any
类,但是如果您不知道它的类型,您将无法使用它进行任何有用的操作。
标准C++中不存在这样的东西。考虑结构或类的实际工作原理:
struct MyStruct {
int a;
int b;
};
假设一个int
的大小为 32 位,那么MyStruct
b
的位置总是与 a
的位置相距 4 个字节。该偏移算术由编译器预先处理。这就是为什么 C 访问成员数据的速度如此之快:没有运行时查找!
因此,如果我想在运行时查找"b"
,我必须找到它在结构中的位置。为此,编译器必须生成一个偏移表以存储在代码中的某个位置。对于一种没有任何隐藏的低效率的语言来说,这是很大的开销。
不幸的是,我不知道。这将需要编译器的特殊支持,因为当前的编译器不存储这种反射所需的任何类型的元数据
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何将真正的字符串从python c-api转换为python脚本
- C++ equivalent of Python getattr