Шаблонное метапрограммирование C++, количество членских переменных?

Действительно ли возможно в C++ определить количество переменных/полей в универсальном классе? например,

// suppose I need metaclass number_members determines number of members

struct example { int i, j; };
assert(number_members<example>::value==2);

Я просмотрел mpl, но не мог найти реализацию.

спасибо.

6
задан Georg Fritzsche 15 May 2010 в 18:10
поделиться

3 ответа

Нет. C ++ не обеспечивает общего самоанализа структур.

Вы можете попробовать C ++ 0x std :: tuple , который имеет некоторые особенности общей структуры POD . Или попробуйте сделать свой собственный из библиотеки Boost MPL . Это было бы немного продвинутым, если вы только начинаете работать с C ++.

7
ответ дан 10 December 2019 в 02:45
поделиться

Вы не можете сделать это напрямую. Тогда очевидный вопрос заключается в том, чего вы пытаетесь достичь - есть вероятность, что вы можете сделать то, что вам нужно, но способ сделать это может быть совершенно другим.

1
ответ дан 10 December 2019 в 02:45
поделиться

Нет. К сожалению, в C ++ нет такой встроенной функции самоанализа. Однако с помощью некоторой дополнительной предварительной обработки, такой как компилятор метаобъектов (moc) Qt , вы можете добиться чего-то подобного ... класс QMetaObject предоставляет propertyCount () ; однако ваш класс должен унаследовать от QObject , использовать макрос Q_OBJECT и зарегистрировать свойства, чтобы все это работало ... короче говоря, это не происходит автоматически.

1
ответ дан 10 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: