Шаблон метапрограммирования C ++, количество переменных-членов? - PullRequest
6 голосов
/ 07 апреля 2010

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

// suppose I need metaclass number_members determines number of members

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

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

спасибо.

Ответы [ 3 ]

7 голосов
/ 07 апреля 2010

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

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

1 голос
/ 07 апреля 2010

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

1 голос
/ 07 апреля 2010

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

...