Я никогда не слышал, чтобы это было возможно, но спрашивал с надеждой, что это возможно.
Для класса с гораздо большим количеством переменных-членов, чем этот:
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 ++ не могли включить такую возможность, поскольку, за исключением виртуальных членов, ячейки памяти переменных были бы смежными, и их типы также известны.Даже если бы они были внешними или виртуальными, тип и размер были бы известны во время выполнения.Так не должно ли это быть возможно?