![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Есть функция
У меня есть два класса M<Data> и T<Data>. Я хочу иметь возможность передавать в функцию экземпляры обоих классов. Как изменить заголовок функции? -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| Alastis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 4 Всего: 10 |
А нельзя эти два класса наследовать от одного?
-------------------- Прости, что я говорю, когда ты меня перебиваешь. |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Первый вариант:
Второй вариант: Перегрузить и для того, и для того варианта функции. Я бы предпочел второй вариант --------------------
|
||||
|
|||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Попробуй что-нибудь вроде этого.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Только надо не забыть проверить: имеет ли параметр С тип M или T.
Добавлено @ 10:53
А что если в класс протекут другие наследники базового? --------------------
|
||||
|
|||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
srd
Сделал как ты написал. В ответ пишет:
P.S. Наследовать эти классы один от другого для меня нет смысла. А перегружать функцию для двух классов жаба душит - внутри функции не нужно менять ни одной строчки. -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| Alastis |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 4 Всего: 10 |
да, могут... видимо нужно все таки перегружать
Не хочется перегружать, а придется -------------------- Прости, что я говорю, когда ты меня перебиваешь. |
||||
|
|||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Я это проверял с gcc 3.3.3 - всё компилировалось успешно.
К сожалению, сейчас проверить с vc++ у меня нет возможности. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
У меня vc++ 6.0. Чё-то не пашет
-------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Проверил в VC++7.1 - тоже всё нормально скомпилировалось. Видимо VC++6.0 не понимает конструкции template<template<class> ... > и т.п.
Попробуй тогда просто:
Конечно, тогда передать функции Func можно всё, что угодно, но если M<> и T<> имеют уникальный интерфейс, то вызов функции с другим параметром будет приводить к ошибкам компиляции. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |