C++定义接口

dan*_*uch 5 c++ macros interface c-preprocessor

#define interface class
Run Code Online (Sandbox Code Playgroud)

(这里有更多 - http://www.codeproject.com/KB/cpp/CppInterfaces.aspx)

那有意义吗?这是否阐明了接口与实现类之间的区别?或者它令人困惑,因为很明显纯虚拟类是接口?

你用它吗?还是"宏是邪恶的"?

Jak*_*icz 15

我说这没有道理.该文章中提出的"解决方案"看起来像一个可怕的混乱 - 使用C++有什么问题?当你需要一个纯粹的抽象类并完成它时,为什么要引入一些糟糕的宏呢?

看起来像C#/ Java背景的人试图在C++中找到自己的方式而迷路了.它只会在实际熟悉C++的开发人员遇到时引入错误和混淆.


Mar*_*som 11

像这样的宏是邪恶的,因为它隐藏了一个外观背后的真正语言,如果你不知道这个秘密就不容易辨别.

定义接口的更好方法是使用通用约定,例如使用"I"作为第一个字符命名它们.


gd1*_*gd1 11

我真的不建议使用这些技巧,我认为smartass.宏不是邪恶的,如果有人包含你的代码并interface用作变量名(为什么不呢?),为什么他/她必须花1小时调试gcc -E因为有人决定"接口"(不是C++)会更聪明?

我不喜欢这样.

  • 请注意,在这种情况下,`interface`是VC++中的关键字,因此当您希望将代码移植到MS环境时,无论如何都会遇到此问题. (3认同)

Dou*_* T. 10

C++从业者提出了有用的惯用方法.这些习语成为其他从业者理解和容易使用的普通方言的一部分.

你在街上雇用的C++程序员会知道一个带有所有纯虚方法而没有实现的基类是一个接口.他们会知道公共继承意味着它实现了这个接口.他们不会知道该文章中指定的疯狂宏语言.

我还要补充一点,习惯用法在C++中尤为重要,因为如果你不小心的话就能真正开始你的脚.事实上,C++中常用的习语可能是C++最强大的功能.


Mar*_*oon 5

我永远不会重新定义或替换现有关键字 - 除了作者之外,它只会导致每个人的混淆......

  • @Helper,也许是因为`interface`不是现有的关键字?不过我不是. (2认同)