Имея метапрограмму шаблона (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% правильное.