【问题标题】:g++: which ways exist to find out which template specialization has been chosen by compiler?g++:有哪些方法可以找出编译器选择了哪个模板特化?
【发布时间】:2015-03-10 13:11:25
【问题描述】:

如果您不确定编译器在特定情况下选择了哪种模板特化 - 您知道如何找出哪些方法? (最好不改代码)

【问题讨论】:

    标签: c++ templates gcc template-specialization


    【解决方案1】:

    不更改代码就没有。

    对于template class,您可以轻松公开公开

    enum {which=0};
    

    在第一个专业化(包括基础)中,并在之后的每个专业化中增加=0。然后只需检查Z<Args...>::which,您就会知道哪个被选中了。

    对于模板函数,你大多不走运:但无论如何你真的不应该专门化模板函数(而是重载)。

    如果不使用返回值,您可以使用它执行类似的技巧 (std::integral_constant<int, 0>)。如果函数使用仅限于该一种用途,您可以更改每个特化以生成明显的错误(例如static_assert(false, "specialization 0");),该错误只会在特化被实例化时(实际上)开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多