gpt4 book ai didi

c++ - 我可以检查哪些函数模板至少实例化过一次吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:10 26 4
gpt4 key购买 nike

我有很多模板代码。由于错误的模板代码除非经过编译,否则不会引发编译器错误,有什么方法可以检查编译器实际“编译”了哪些模板函数,哪些被完全忽略了?

编辑 2:

如果一个特定的类模板函数模板 被实例化一次,对于任何参数类型,那是可以的。我想要从未以任何形式实例化的函数/类模板列表。

一个具体的例子如下。它们是两个不同的模板函数,我想知道其中一个或两个是否从未被实例化。

template <typename T_InputItr, typename T_Distance>
void advance( T_InputItr& aItr, T_Distance aN, bidirectional_iterator_tag )

template <typename T_InputItr, typename T_Distance>
void advance( T_InputItr& aItr, T_Distance aN, random_access_iterator_tag )

编辑:目前,对于类,我在 .cpp 文件中手动实例化它们,如下所示:

template TClass<int>;

对于我感兴趣的所有类型。这很好。但那是如果我记得这样做的话。有时我需要编写很多小的模板类/函数,而我忘记手动实例化一些函数/类模板并在以后查找。我希望编译器告诉我这一点。

或者,如果我可以获得实例化的函数/类模板列表(对于任何参数),那么我可以将其与我可能在代码中 grep 查找的完整列表进行比较。

另一个好处 是“测试”哪些方法是在模板类中编译的,该模板类使用类型特征有选择地编译出某些函数。在继续之前,我想确定我选择正确函数的逻辑是正确的。

最佳答案

鉴于您使用的是 MSVC 2008,您可以通过生成链接器映射文件并搜索该函数的所有实例化或通过 DIA 检查 .pdb 来完成此操作。您需要使用链接器标志/OPT:NOICF 禁用 COMDAT 折叠,以便您可以找到碰巧编译到同一程序集的函数。

关于c++ - 我可以检查哪些函数模板至少实例化过一次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8935705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com