【发布时间】:2012-07-09 21:26:29
【问题描述】:
给定一个模板元程序 (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、fact 和 fact 已实例化)。这个例子当然是微不足道的,但是每当你开始使用例如Boost.MPL,编译时间真的爆炸了,我想知道其中有多少是由于隐藏的类实例化。我的问题主要是针对 Visual C++,但对于 gcc 的答案也将不胜感激。
编辑:我目前对 Visual C++ 非常脆弱的方法是从 Stephan T. Lavavej 的videos /d1reportAllClassLayout 之一添加编译开关,并对输出文件进行 grep + 字数统计,但是它 (a) 极大地增加了编译时间,并且 (b) 正则表达式很难 100% 正确。
【问题讨论】:
标签: c++ templates counter instantiation template-meta-programming