首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译器是否管理使用模板元编程生成的重复类型

编译器是否管理使用模板元编程生成的重复类型
EN

Stack Overflow用户
提问于 2015-06-15 21:23:28
回答 2查看 61关注 0票数 0

在下面的代码中,我将一个可变模板拆分为两个typeList,typeList和putLeft的定义并不重要。

代码语言:javascript
复制
template<typename ...SL>
struct split {
    static const size_t size = sizeof...(SL);
    typedef typename putLeft<typeList<>,size/2, typeList<SL...>>::result firstHalf;
    typedef typename putLeft<typeList<>,size/2, typeList<SL...>>::rest secondHalf;
};

我想知道的是,当我稍后使用putLeft<typeList<>,size/2, typeList<SL...>>::resultputLeft<typeList<>,size/2, typeList<SL...>>::rest时,编译器是管理putLeft<typeList<>,size/2, typeList<SL...>>::result的重复结构,还是重新计算该结构?

EN

回答 2

Stack Overflow用户

发布于 2015-06-15 21:28:47

是的,编译器只会在您需要result类型名称时实例化一次putLeft<typeList<>,size/2, typeList<SL...>>

然而,为它取一个别名可能是值得的,这样你就不会在第二行输入它:

代码语言:javascript
复制
template<typename ...SL>
struct split {
    static const size_t size = sizeof...(SL);
    using impl = putLeft<typeList<>,size/2, typeList<SL...>>;

    using firstHalf = typename impl::result;
    using secondHalf = typename impl::rest;
};

它不会对实际发生的事情产生任何影响,但是您代码的读者会感谢您的。

票数 2
EN

Stack Overflow用户

发布于 2015-06-15 21:44:54

现代编译器避免了重新编译。这有助于缩短编译时间。

较旧的编译器重复地重新编译相同的类型,但这并不影响程序的正确性。他们只是在以后的阶段丢弃了重复的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30846349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档