我的API应该使用非成员函数来作用于对象,还是使函数成为对象的公共函数?

Ale*_*rty 1 c++ oop api

最近我了解到OOP的许多好处(包括漂亮的代码).

所以,现在我正在尝试编写一个小型的物理API供我个人使用,或许可以放在一些小游戏中.这主要是因为我喜欢练习编码,我喜欢我的物理.

但问题是,许多API都有这样的接口(包括Windows API):

// In this case, Object is just a plain data container without a constructor.
Object object = NewObject(...);
DoSomething(object);
DoAnotherThing(object,...);
 ... and so on
Run Code Online (Sandbox Code Playgroud)

这是应该如何安排API ,还是有更多的OO风格的方式,如:

Object object(...);
object.DoSomething(...);
object.DoAnother(otherObj,...);
otherObject.attachNode(object);
 ... and so on again
Run Code Online (Sandbox Code Playgroud)

我希望你明白这个主意.因此,总结一下问题,哪个方法更受欢迎,为什么我看到很多第一个例子,尽管OOP得到了美化(尽管参考中的这些API可能只是旧的,比如Windows API).

作为旁注,您如何看待Windows API?对我而言似乎有点......不对.

jal*_*alf 5

API可以按您想要的任何方式查找.如果要创建C++ API,则可以根据需要使用成员函数.使用Win32 API,Microsoft必须制作可从C(以及各种其他语言)以及C++访问的内容,因此他们必须使用普遍可访问的功能来表达所有内容.这意味着他们不能使用类(或扩展名,成员函数),名称空间,重载,模板和各种其他C++特性.

然后他们采用了相当合理的前提,并构建了可以想象的最丑陋,最不一致的API.

如果您的API旨在从C++代码中使用,那么您可以使用您喜欢的所有C++功能.

另外,即使在C++中,使一切成为一个成员函数也不一定是可取的.默认情况下使用非成员函数可能是一个非常好的主意,即使在面向对象的代码中也是如此,尽管原因与Microsoft在其API中的原因不同.

  • 我认为没有人指责Windows程序员是神.但他们确实有一些非常优秀的程序员.有很多原因可以解释为什么Windows API和它一样糟糕,但我不认为他们的程序员整体质量就是其中之一. (2认同)