【发布时间】:2020-02-29 07:57:34
【问题描述】:
假设三个对象A a、B b 和C c。这三个都有一个签名为void foo(Bar& bar)的方法。
有时我需要编写如下代码:
a.foo(bar);
b.foo(bar);
c.foo(bar);
现在有很多代码重复,尤其是当表达式变长时。
到目前为止,我想出了
foreach (const auto& value : { a, b, c}) value.foo(bar);
但这只有在a、b 和c 属于同一类型且foo 是const 时才有效。
是否有一种优雅的零成本抽象来一次性抽象出针对不同类型和非常量函数的免费相同方法调用?
这最好适用于涉及value 的任意语句。
【问题讨论】:
-
A、B和C是否有共同的基类?如果没有,为什么不呢? -
@JohnKugelmansupportsMonica 据我了解,使用继承需要指向对象的指针和虚拟方法表查找。这会比直接写出 3 行效率低。
标签: c++ abstraction code-duplication