自动计算TMP中实例化类的数量?

Tem*_*Rex 11 c++ templates counter instantiation template-meta-programming

给定模板元程序(TMP),C++编译器是否会生成计算实例化类数的构建统计信息?或者有没有其他方法可以自动获取此号码?因此对于例如对立的因子

#include <iostream>

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

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

我想回到数字3(因为事实<3>,事实<2>,事实<1>被实例化).这个例子当然是微不足道的,但每当你开始使用例如Boost.MPL时,编译时间真的会爆炸,我想知道有多少是由于隐藏的类实例化造成的.我的问题主要是针对Visual C++,但是gcc的答案也会受到赞赏.

编辑:我目前非常脆弱的Visual C++方法是从Stephan T. Lavavej的视频/d1reportAllClassLayout 之一添加编译开关,并在输出文件上执行grep +字数,但它(a)极大地增加了编译时间,并且(b)正则表达式很难100%正确.

Jon*_*ely 8

我对GCC 进行了一行更改,使其在实例化时打印出每个类模板的名称.您可以cc1plus直接调用C++前端而不使用-quiet标志来获取功能模板的相同内容.

我还没有把它变成一个合适的GCC选项,它只是我自己的源代码树上的一个黑客.我正在考虑将其作为插件实现,但它并不接近我的TODO列表的顶部.