加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:28:50 所属栏目:百科 来源:网络整理
导读:给定一个模板元程序(TMP),C编译器是否生成构建统计信息来计算实例化的数量?还是有其他方式自动获得这个号码?所以例如庸俗的阶乘 #include iostreamtemplateint N struct fact { enum { value = N * factN-1::value }; };template struct fact1 { enum { va
给定一个模板元程序(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%正确.

解决方法

我做了一个 one-line change到GCC,使它打印出每个类模板的名称,当它实例化它.您可以直接调用C前端cc1plus,而不使用-quiet标志来获取功能模板的相同.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读