C++中C NULL函数指针的等价物?

sho*_*osh 2 c c++ oop function-pointers vtable

C中实现"面向对象"的一种常见做法是使用函数指针数组.这似乎与C++ vtable类似,实质上C++虚函数机制只是函数指针数组的语法糖.
但是C机制还有一个在C++中缺少的附加功能.函数指针可以为NULL,调用者可以检查函数是否为NULL,以查看对象是否实现某种方法.但是在C++中,方法不能为NULL,并且类不能"不实现"方法.

在C++中模仿这种行为的最接近的方法是什么?

Kon*_*lph 8

这种做法有时被称为胖接口,被认为是反模式.

适当的面向对象的方法是提供几个子类的层次结构,即将"可选"方法分离为额外的接口,并且只允许某些类实现该接口.

测试一个类是否实现了这些方法通过测试它是否是相关接口的实例.

(顺便提一下,在C中也是如此 - 虽然我从未在严肃的项目中使用过C,但我怀疑你应该NULL在那里使用函数指针,而不是建模正确的类型层次结构.)

  • "通过测试它是否是相关接口的实例":使用`dynamic_cast`.(这是`dynamic_cast`的少数好用之一.) (2认同)