5

我有一个很大的代码库,想找到对特定标准或第三方库函数的调用。如果函数的名称不是很独特,并且还可以作为变量名称和内部注释出现,则很难使用文本搜索来实现。如果库函数被重载,则会出现额外的复杂情况,并且必须找到许多重载中的一个。最好不要修改库。

我发现的一种方法是删除感兴趣的函数,这将导致在调用它的每个地方都出现编译错误(并且在没有此类调用的情况下不会出现错误)。例如,如果要查找所有调用sqrt(float)但全部跳过sqrt(double),则解决方案如下:

#include <cmath>

struct A {
    friend float sqrt(float) noexcept = delete;
};

int main() {
    sqrt( 1.0 );  // no error for double argument
    sqrt( 1.0f ); // 'deleted function call' error in Clang and MSVC
}

该解决方案实际上是基于删除已声明函数的非标准能力。它适用于 Clang 和 MSVC,但不适用于 GCC。演示:https ://gcc.godbolt.org/z/9h3jGMjWc

是否有实现相同目标的标准方法?

4

0 回答 0