c++ - 查找类的成员变量列表及其类型?

标签 c++ copy-constructor

我从来没有听说过这可能,但希望它可能会问。
对于具有比这更多的成员变量的类:

class A
{
 public:
  SomeOtherClass* s;
  int i;
  int j;
  A() {}
  A(const A& soc): s(soc.s->Clone()), i(soc.i), j(soc.j) {}
};

我总是要记住,如果我向类添加另一个变量int k,我也必须将它添加到初始化列表k(soc.k),有时也在析构函数中。 我不得不添加/删除成员变量很多次,忘记初始化列表中的复制并在调试时发现遗漏了很久,这真的很烦人。

因此,我想知道是否有一种语法/逻辑可以通过它找出一个类的成员变量列表及其类型,以便我可以遍历它们并决定需要复制哪些在复制ctor中,哪些需要深度复制?

我不明白为什么 C++ 的创建者不能包含这样的工具,因为除了虚拟成员之外,变量的内存位置是连续的,而且它们的类型也是已知的。即使它们是外部的或虚拟的,类型和大小也会在运行时已知。那不应该吗?

最佳答案

C++ 中没有反射,因此您需要一个外部库来执行此操作。 C++ 的创建者没有实现此功能,因为它意味着性能损失,而性能是 C++ 的主要目标之一。

关于c++ - 查找类的成员变量列表及其类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386404/

相关文章:

c++ - libuv: uv_check_t 和 uv_prepare_t 用法

c++ - 传递或返回变量时并不总是调用复制构造函数

c++ - 没有可调用的匹配函数

c++ - 在Mac上读写USB(HID)中断端点

c++ - 传递失败的模板参数

c++ - 使用 InterlockedIncrement64 的引用计数对象的复制构造函数的原子性

c++ - 调用构造函数的次数

c++ - 复制构造函数上的程序崩溃

c# - 从 C++ 调用 C#,C# 命名空间中的 "."有困难

c++ - 带有 ITK 和 FFTW 的 VS2008 中的错误 LNK2019(未解析的外部符号)