Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从VS2010 C+;中排除特定的标准库函数+;编译程序 有没有一种方法可以在VS2010编译器中禁用C++中标准库的某些功能? 例如,如果我希望一个团队不能使用std::max或std::min,如果他们仍然使用,编译器应该给出一个错误。可能吗?我怎么能这么做_C++ - Fatal编程技术网

从VS2010 C+;中排除特定的标准库函数+;编译程序 有没有一种方法可以在VS2010编译器中禁用C++中标准库的某些功能? 例如,如果我希望一个团队不能使用std::max或std::min,如果他们仍然使用,编译器应该给出一个错误。可能吗?我怎么能这么做

从VS2010 C+;中排除特定的标准库函数+;编译程序 有没有一种方法可以在VS2010编译器中禁用C++中标准库的某些功能? 例如,如果我希望一个团队不能使用std::max或std::min,如果他们仍然使用,编译器应该给出一个错误。可能吗?我怎么能这么做,c++,C++,谢谢并致以最良好的祝愿, Ben您可以重新定义不想使用的函数,只要它们在std库之前被拉入,编译器就会使用您的函数。然后可以使用#error标记在编译期间对其进行标记 namespace std { template <class T> const T& min ( const T& a, const T& b ) { #error("Don't use this") } template <class T

谢谢并致以最良好的祝愿,
Ben

您可以重新定义不想使用的函数,只要它们在std库之前被拉入,编译器就会使用您的函数。然后可以使用#error标记在编译期间对其进行标记

namespace std {
    template <class T> const T& min ( const T& a, const T& b )
    {
        #error("Don't use this")
    }
    template <class T, class Compare>
    const T& min ( const T& a, const T& b, Compare comp )
    {
        #error("Don't use this")
    }
}

#include <algorithm>

int main()
{
    return std::min(5, 4);
}
名称空间std{
模板常数T&min(常数T&a、常数T&b)
{
#错误(“不要使用此”)
}
模板
常数T&min(常数T&a、常数T&b、比较组件)
{
#错误(“不要使用此”)
}
}
#包括
int main()
{
返回标准::最小值(5,4);
}

不要这样做。没有充分的理由,而您的示例(
std::max
)当然不是。

您可以强制包含一个头文件,该头文件将这些函数定义为空宏,使其无法使用。到目前为止,您发现了什么?@BartekBanachewicz:这也使它们无法用于标准库本身。不,坏主意。@ MalSter如果你把那个文件作为最后一个文件,为什么它会让它们对标准库不可用?@ BaltkkBauneWiCiz:因为当你在自己的头中考虑代码时,没有概念是“最后一个”。经过预处理后,通常会与std代码交织。因此,当宏跟随最后一个std代码时,它不会覆盖您自己的所有代码。这是一个相当糟糕的解决方案,
#error
是预处理阶段的一部分。那么这有什么错呢@ben1980本可以有更好的功能,也许是使用他想要确保正在使用的额外硬件。
\error
将在预处理阶段触发,因此此代码永远不会编译。这就是我理解问题的方式。如果std库函数被错误使用,他希望编译器生成一个错误。@dwxw:如果它们没有被使用,就不应该生成错误。