Автоматически подсчитывать количество созданных классов в TMP?

Имея метапрограмму шаблона (TMP ), компиляторы C++ производят статистику сборки, которая подсчитывает количество экземпляров классов? Или есть другой способ автоматически получить этот номер? Так, например. косвенный факториал

#include 

template struct fact { enum { value = N * fact::value }; };
template<> struct fact<1> { enum { value = 1 }; };

int main()
{
    const int x = fact<3>::value;
    std::cout << x << "\n";
    return 0;
}

Я хотел бы вернуть число 3 (, так как факт, факт и факт создаются ). Этот пример, конечно, тривиален, но всякий раз, когда вы начинаете использовать, например. Boost.MPL, время компиляции действительно увеличивается, и я хотел бы знать, насколько это связано с созданием экземпляров скрытых классов. Мой вопрос в первую очередь касается Visual C++, но ответы на gcc также будут оценены.

РЕДАКТИРОВАТЬ:Мой текущий очень ненадежный подход к Visual C++ заключается в добавлении переключателя компиляции из одного из видео Stephan T. Lavavej /d1reportAllClassLayout и выполнении grep + подсчета слов в выходном файле, но это (a )значительно увеличивает время компиляции и (b )регулярное выражение трудно получить на 100% правильное.

11
задан TemplateRex 9 July 2012 в 21:37
поделиться