g ++:有哪些方法可以找出编译器选择的模板专业化?

时间:2015-03-10 13:11:25

标签: c++ templates gcc template-specialization

如果您怀疑编译器在特定情况下选择了哪种模板专业 - 您知道如何查找哪些方法? (最好不要改变代码)

1 个答案:

答案 0 :(得分:1)

无需更改代码即可。

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

enum {which=0};

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

对于模板函数,你大部分都不走运:但你真的不应该专门模拟模板函数(反而过载)。

如果未使用返回值,您可以使用它执行类似的操作(std::integral_constant<int, 0>)。如果函数使用仅限于那个使用,您可以更改每个特化以生成一个明显的错误(例如static_assert(false, "specialization 0");),这只会在实例化特殊化时启动(实际上)。