Действительно ли возможно в C++ определить количество переменных/полей в универсальном классе? например,
// suppose I need metaclass number_members determines number of members
struct example { int i, j; };
assert(number_members<example>::value==2);
Я просмотрел mpl, но не мог найти реализацию.
спасибо.
Нет. C ++ не обеспечивает общего самоанализа структур.
Вы можете попробовать C ++ 0x std :: tuple
, который имеет некоторые особенности общей структуры POD
. Или попробуйте сделать свой собственный из библиотеки Boost MPL . Это было бы немного продвинутым, если вы только начинаете работать с C ++.
Вы не можете сделать это напрямую. Тогда очевидный вопрос заключается в том, чего вы пытаетесь достичь - есть вероятность, что вы можете сделать то, что вам нужно, но способ сделать это может быть совершенно другим.
Нет. К сожалению, в C ++ нет такой встроенной функции самоанализа. Однако с помощью некоторой дополнительной предварительной обработки, такой как компилятор метаобъектов (moc) Qt , вы можете добиться чего-то подобного ... класс QMetaObject предоставляет propertyCount () ; однако ваш класс должен унаследовать от QObject , использовать макрос Q_OBJECT и зарегистрировать свойства, чтобы все это работало ... короче говоря, это не происходит автоматически.