对于模板参数给定的类型,C++ 有某种类型的鸭子类型。我们不知道类型DUCK1
和DUCK2
将是什么,但只要它们可以quack()
,它将编译并运行:
template <class DUCK1, class DUCK2>
void let_them_quack(DUCK1* donald, DUCK2* daisy){
donald->quack();
daisy->quack();
}
但是写起来有点不方便。当我完全不关心实际类型是什么DUCK1
,DUCK2
而是想充分利用鸭子类型的想法时,我想要一些与上面略有不同的东西:
- 我想省略编写一个重复且几乎没有意义的模板参数列表(想象一下如果有 7 只鸭子会发生什么......)
- 我想更明确一点,从不使用类型,并且只有接口才是重要的。
- 我想要某种接口注释/检查。以某种方式明确类型背后的预期接口。(然而,这与鸭子打字有点不同。)
C++ 是否提供任何功能来实现这 3 个想法中的一个或多个?
(我知道在大多数情况下,虚拟继承是实现此类模式的首选方法,但这里的问题专门针对静态多态的情况。)