【发布时间】:2016-04-27 12:50:07
【问题描述】:
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 个想法中的一个或多个?
(我知道在大多数情况下,虚拟继承是实现此类模式的首选方法,但这里的问题专门针对静态多态的情况。)
【问题讨论】:
标签: c++ templates c++11 duck-typing static-polymorphism