c++ - 我应该在运行时或编译时强制执行 C++ 接口(interface)吗?

标签 c++ oop

我在 Nmap's source code 中找到了这个:

/** This function MUST be overwritten on ANY class that inherits from          
  *  this one. Otherwise getBinaryBuffer will fail */                          
virtual u8 * getBufferPointer(){                                               
    netutil_fatal("getBufferPointer(): Attempting to use superclass PacketElement method.\n");
    return NULL;                                                               
 } /* End of getBufferPointer() */                                             

如果 getBufferPointer 是纯虚拟的,任何未能实现它的派生类都会在编译时被捕获。为什么选择运行时错误而不是编译器触发的错误会更好?

最佳答案

一个人不应该更喜欢运行时错误而不是编译时错误,尤其是当语言提供了一种更简单的方法来准确地做你想做的事情时,这也会产生编译器错误。在我 5 年多的 C++ 编码中,我从未遇到过使用您的方式创建方法的理由。

Run time error = 许多可能的原因,我需要自己的调试语句来找到它。可能还需要多次运行该程序。在你的情况下,我可能有其他类无法重写该方法,这可能会在某些未定义的点导致错误。

编译时错误 = 一个原因,我的编译器告诉我发生了什么。

关于c++ - 我应该在运行时或编译时强制执行 C++ 接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34418506/

相关文章:

c++ - 我可以将 QObject 的两个子类移动到同一个 QThread 吗?

c++ - C++中的结构和类有什么区别?

c# - "stringDemo"与新字符串("stringDemo".ToCharArray);

php - WordPress - 删除插件类中定义的操作

oop - Lua继承不包括元方法吗?

python - 为什么我的实例会发生变化?

c++ - MonoDevelop 的 G++ 编译器

c++ - 显示房屋的 OpenGL 功能不起作用

c++ - 指针对指针访问

c++ - SetCapture 和 IWebBrowser2 容器的问题