如何禁止函数指针参数的NULL值

Ale*_*mov 10 c++

我有一个功能:

void foo(int parm11, pointer to function) {...}
Run Code Online (Sandbox Code Playgroud)

我想禁止用NULL第二个参数的值来调用它.换句话说,我想从以下C++源代码行的编译器获取错误消息:

foo(5, NULL);
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 10

你可以捕获一个显式的nullptr(以及任何可转换为空指针常量的东西),因为它有自己的类型:

void foo(int, pfunc_type); // Your function
void foo(int, std::nullptr_t) = delete; // The "bad" overload
Run Code Online (Sandbox Code Playgroud)

当然,确定的用户仍然可以传递空函数指针,他们只是不能通过直接为参数指定空指针常量来完成它.

可能最好重新考虑指针,并且只需要像AlexD推荐的那样使用函数引用.

  • 对于`NULL`的事情,你也可以添加一个删除的重载,使用`int`(也可能还有一个使用`long`). (3认同)
  • 你不需要额外的重载来捕获NULL,null文字常量有一个隐式转换为`nullptr_t`,第一个建议已经涵盖了`nullptr`,`0`,`0ULL`和`NULL` (3认同)