给定一个模板元程序(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; }
我想回到第3号(因为事实< 3>事实< 2>和事实< 1>被实例化).这个例子当然是微不足道的,但是每当你开始使用例如Boost.MPL,编译时间真的爆炸了,我想知道这是多少是由于隐藏的类实例.我的问题主要是为Visual C,但gcc的答案也将不胜感激.
编辑:我目前对Visual C的非常脆弱的方法是从Stephan T. Lavavej的videos / d1reportAllClassLayout之一添加编译开关,并在输出文件上执行一个grep字数,但它(a)大大增加了编译次数,(b)正则表达式很难得到100%正确.