如何检查编译在哪个专门化模板中

How to check which specialized template is compiled in

本文关键字:专门化 编译 何检查 检查      更新时间:2023-10-16

我有一个模板化的函数,它也专门用于内置类型(int, float)。是否有一种方法来显示哪些函数正在使用,哪些正在被编译器,在编译时修剪?也许可以使用#pragma??

template<typename T>
int func(T val)
{
 ...
}
template<>
int func<float>(float val)
{
 ...
}
// etc

你最好的选择是不定义所有的函数,看看编译器在试图实例化模板函数时抛出了什么错误。如果您需要多次执行此操作,也许可以在该代码周围设置#ifdef,以便"转储使用的函数"构建。从那里,它将是一个简单的shell脚本或其他东西,从编译器的错误日志中取出实例化的函数的类型。

或者,您可以根据模板参数添加编译错误:

template<typename T>
int func(T val)
{
    T::this_version_is_being_included;
}