如何检查函数是否存在

Gas*_*sim 6 c++ macros templates c++11

我想实现我自己的std::make_unique函数,函数是std命名空间的一部分.我知道这个辅助函数被添加到C++ 14中,但我没有在C++ 11中使用它.所以,我想用一些C++ 11模板魔法检查它(找不到任何带宏的选项)来检查std命名空间内是否存在函数,以及它是否自己定义它.那可能吗?我甚至不知道从哪里开始.

Dav*_*eas 6

无法::std命名空间添加新功能.您只能添加现有模板的特化,甚至只能添加您自己的类型.

  • @Paranaix:你的程序变得不合规,编译器检测到它可能会拒绝它,或者它可能会做*任何*... @ Daniel:是的,*不能*是斜体的原因. (2认同)
  • @TemplateRex我可以想到很多方法,如果没有主动检查,这可能导致不好的事情发生.添加该功能时不会更新版本,可能会有一些差异.为了优化的目的,编译器将`std`"headers"实现为非普通C++代码,因此当你`std ::`时,你正在与只看起来像*C++命名空间的东西进行交互.阅读代码的人在4年后会看到`std :: make_unique`并认为它是C++ 1y的`make_unique`,但标准在那段时间内转移了,现在你的代码是不可维护的. (2认同)

Bat*_*eba 6

您最好的选择是使用标准__cplusplus宏,对于C++ 11,它是201103L.对于C++ 14以上,它将是一个不同的值.