【发布时间】:2015-03-10 13:11:25
【问题描述】:
如果您不确定编译器在特定情况下选择了哪种模板特化 - 您知道如何找出哪些方法? (最好不改代码)
【问题讨论】:
标签: c++ templates gcc template-specialization
如果您不确定编译器在特定情况下选择了哪种模板特化 - 您知道如何找出哪些方法? (最好不改代码)
【问题讨论】:
标签: c++ templates gcc template-specialization
不更改代码就没有。
对于template class,您可以轻松公开公开
enum {which=0};
在第一个专业化(包括基础)中,并在之后的每个专业化中增加=0。然后只需检查Z<Args...>::which,您就会知道哪个被选中了。
对于模板函数,你大多不走运:但无论如何你真的不应该专门化模板函数(而是重载)。
如果不使用返回值,您可以使用它执行类似的技巧 (std::integral_constant<int, 0>)。如果函数使用仅限于该一种用途,您可以更改每个特化以生成明显的错误(例如static_assert(false, "specialization 0");),该错误只会在特化被实例化时(实际上)开始。
【讨论】: