| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > шаблоны, синтаксис |
| Автор: Artiom 17.4.2005, 09:43 | ||
Есть функция
У меня есть два класса M<Data> и T<Data>. Я хочу иметь возможность передавать в функцию экземпляры обоих классов. Как изменить заголовок функции? |
| Автор: Alastis 17.4.2005, 10:22 |
| А нельзя эти два класса наследовать от одного? |
| Автор: chipset 17.4.2005, 10:34 | ||
Первый вариант:
Второй вариант: Перегрузить и для того, и для того варианта функции. Я бы предпочел второй вариант |
| Автор: srd 17.4.2005, 10:37 | ||
Попробуй что-нибудь вроде этого.
|
| Автор: chipset 17.4.2005, 10:51 | ||
| Только надо не забыть проверить: имеет ли параметр С тип M или T. Добавлено @ 10:53
А что если в класс протекут другие наследники базового? |
| Автор: Artiom 17.4.2005, 12:00 | ||
| srd Сделал как ты написал. В ответ пишет:
P.S. Наследовать эти классы один от другого для меня нет смысла. А перегружать функцию для двух классов жаба душит - внутри функции не нужно менять ни одной строчки. |
| Автор: Alastis 17.4.2005, 13:56 | ||||
да, могут... видимо нужно все таки перегружать
Не хочется перегружать, а придется |
| Автор: srd 17.4.2005, 13:57 |
| Я это проверял с gcc 3.3.3 - всё компилировалось успешно. К сожалению, сейчас проверить с vc++ у меня нет возможности. |
| Автор: Artiom 17.4.2005, 18:23 |
| У меня vc++ 6.0. Чё-то не пашет |
| Автор: srd 18.4.2005, 02:53 | ||
| Проверил в VC++7.1 - тоже всё нормально скомпилировалось. Видимо VC++6.0 не понимает конструкции template<template<class> ... > и т.п. Попробуй тогда просто:
Конечно, тогда передать функции Func можно всё, что угодно, но если M<> и T<> имеют уникальный интерфейс, то вызов функции с другим параметром будет приводить к ошибкам компиляции. |