我使用一个非常重要且不可触及的库.问题是库声明了min,max函数,所以当我在项目中包含STL头时,它们会发生冲突.我想在STL中禁用min,max函数(如#define NOMNMAX),如果可以的话.如果我不能,那将是什么解决方案?
重要提示:抱歉,这不是宏.两个函数是模板函数.
喜欢
template<T>
T min(const T& a, const T& b) { a < b ? a : b; }
Run Code Online (Sandbox Code Playgroud)
提前致谢.
小智 17
min和max函数在std命名空间中定义,因此此代码不应编译:
#include <algorithm>
int main() {
int n = min( 1, 2 );
}
Run Code Online (Sandbox Code Playgroud)
如果是,则标准库不符合要求.此外,您重要且不可触及的库应该在命名空间中声明它的功能.如果不是.向供应商大声抱怨.
编辑:由于这些功能大概是在头文件中,您可以触摸它们.所以黑客就是从标题中删除模板并用以下内容替换它们:
using std::min;
using std::max;
Run Code Online (Sandbox Code Playgroud)
虽然为什么图书馆的作者认为需要定义这些模板是任何人的猜测.
由于两者min和max(以及所有其他标准库成员)都在std命名空间中定义,因此您不能导入该命名空间,即不要使用using namespace std;.您仍然可以通过显式命名空间结果来使用STL,例如.std::max,std::cout等等.