В 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 ++ какие-либо функции для реализации одной или нескольких из трех идей?
(Я знаю, что виртуальное наследование - это метод выбора в большинстве случаев для реализации таких шаблонов, но здесь вопрос конкретно касается случая статического полиморфизма.)