c++ - g++ : which ways exist to find out which template specialization has been chosen by compiler?

标签 c++ templates gcc template-specialization

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

最佳答案

没有更改代码。

对于 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/

相关文章:

c++ - 检查 vector 中的所有结构是否相等

iphone - 不使用doxygen创建类图

c++ - 在 C++ 中使用 tinyxml2 读取 xml 文件

c++ - 创建一个容器来存储模板类实例

javascript - 使用带 Angular js 的灰尘模板

c - 如何通过 gcc 临时文件创建进行故障排除

c - Gcc 内联汇编 "' asm' operand has impossible constraints"是什么意思?

android - Gradle 未使用 ndkBuild 进行编译

c++ - 在模板函数中自动将 const char[] 转换为 const char *

c++ - 抑制特定代码行的 -Wconversion