给定一个模板元程序 (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(因为 fact<3>、fact<2> 和 fact<1> 已实例化)。这个例子当然是微不足道的,但是当你开始使用例如 Boost.MPL 时,编译时间真的会爆炸,我想知道其中有多少是由于隐藏的类实例化。我的问题主要是针对 Visual C++,但对于 gcc 的答案也将不胜感激。
编辑:我目前对 Visual C++ 非常脆弱的方法是从 Stephan T. Lavavej 的视频/d1reportAllClassLayout 之一添加编译开关并对输出文件进行 grep + 字数统计,但它 (a) 极大地增加了编译时间和 (b)正则表达式很难 100% 正确。