将接口或引用作为参数传递给函数

passing interface or reference to a function as parameter

本文关键字:参数传递 函数 接口 引用      更新时间:2023-10-16

我有一个包装器类,并将其对象传递给一个函数。

class wrapper
{
/// some functionality
}

作为引用传递给类会更好,比如

fun(wrapper & ob)

或由包装器继承的新接口,如:

class Interface
{
}
 ....
class wrapper:public Interface
 ...
fun(Interface& ob)

如果您希望您的函数只接受wrapper类的实例,请使用

fun(wrapper& ob)

fun(const wrapper& ob)

如果你不打算修改它。

如果你想让你的函数接受任何实现Interface类的东西(只有当有比wrapper继承Interface更多的类时才真正有用),然后使用:

fun(Interface& ob)

fun(const Interface& ob)
选择取决于用例。

Interface方法更好,如果:

  1. 您希望遵循Liskov替换原则,并能够在将来用其他实现Interface的类替换wrapper
  2. 你想对fun的用户隐藏wrapper的实现——也就是说,你不需要在fun声明之前包含wrapper.h
  3. 等等。

通常最好使用Interface从接口中抽象实现,但也不要忘记"不为你不使用的东西付费"原则,即如果你知道除了wrapper之外你不需要Interface的任何实现,并且wrapper.h #包含对你的项目来说不是问题,那么使用Interface将是过度设计