如果您不确定编译器在特定情况下选择了哪种模板特化 - 您知道如何找到哪些方法? (最好不改代码)
最佳答案
没有更改代码。
对于 template class
, 你可以很容易地公开一个公众
enum {which=0};
在第一个特化(包括基础)中,递增=0
在每个专精之后。然后检查Z<Args...>::which
你会知道哪个被选中了。
对于模板函数,您大多不走运:但无论如何您真的不应该专门化模板函数(而是重载)。
如果不使用返回值,您可以用它做一个类似的技巧 (std::integral_constant<int, 0>
)。如果函数使用仅限于一次使用,您可以更改每个特化以生成一个明显的错误(例如 static_assert(false, "specialization 0");
),它只会在特化被实例化时(在实践中)启动。
关于c++ - g++ : which ways exist to find out which template specialization has been chosen by compiler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28964656/