Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / шаблоны / 14 сообщений из 14, страница 1 из 1
03.10.2006, 14:52
    #34028917
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Можно ли вызывать протектед перегруженные методы класса предка из их перегруженных функций наследника, ставшего шаблоном?
...
Рейтинг: 0 / 0
03.10.2006, 14:58
    #34028939
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Конкретно, такое:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
class KhPipeDated : public KhPipe {
    protected:
	int readData(int nPipe, KhPipeData **khPipeData);
	int readData(int nPipe, unsigned char *data, unsigned short *dataLen);
...

template <class Reader>
class KhPipeDatedCb : public KhPipeDated {
    protected:
	int readData(int nPipe) {
	    KhPipeData *khPipeData;
	    if (readData(nPipe, &khPipeData)!= 0 )
		return - 1 ;
	    if (delegate[nPipe]!=NULL)
    		(*(delegate[nPipe]))(khPipeData->data, khPipeData->dataLen);
	    freeData(khPipeData);
	    return  0 ;
	}
    public:

	int readDataDown() {//Внимание: делегат вызывается синхронно с этой функцией
	    return readData(KH_PIPE_DOWN);
	}
	int readDataUp() {//Внимание: делегат вызывается синхронно с этой функцией
	    return readData(KH_PIPE_UP);
	}
};



матершина
khstd.h: In member function `int KhPipeDatedCb<Reader>::readData(int) [with
Reader = KhPipeDatedTest]':
khstd.h:108: instantiated from `int KhPipeDatedCb<Reader>::readDataDown() [with Reader = KhPipeDatedTest]'
main.cpp:50: instantiated from here
khstd.h:78: error: no matching function for call to `
KhPipeDatedCb<KhPipeDatedTest>::readData(int&, KhPipeData**)'
khstd.h:76: error: candidates are: int KhPipeDatedCb<Reader>::readData(int)
[with Reader = KhPipeDatedTest]
...
Рейтинг: 0 / 0
03.10.2006, 15:00
    #34028947
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Такое, впечатление, что при перегрузке методов шаблонным классом, все методы предка теряются.
...
Рейтинг: 0 / 0
03.10.2006, 15:38
    #34029120
шаблоны
Такое, впечатление, что при перегрузке методов шаблонным классом, все методы предка теряются.

данные методы виртуальные?
...
Рейтинг: 0 / 0
03.10.2006, 15:48
    #34029159
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Голенков Владимирданные методы виртуальные?

Ну, где же они виртуальные? Самые настоящие, определенные, честные методы.

Такой же метод freeData предка вызывается из наследника и все хорошо, хотя они тоже лежат в разных объектниках (т.е. сам объектник модуля и объектник приложения с инстанцированными методами).
...
Рейтинг: 0 / 0
03.10.2006, 15:50
    #34029164
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Да, кстати, переименовал метод предка, все стало нормально компилиться и работать. Но вопрос не снят, т.к.
1. Хочу разобраться в этом вопросе.
2. Хочу переименовать обратно.
...
Рейтинг: 0 / 0
03.10.2006, 15:56
    #34029195
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Что то было такое при видимость перегруженных функций при специализации.
Но навскидку не вспомню. Это должно быть оговорено в стандарте.
...
Рейтинг: 0 / 0
03.10.2006, 15:59
    #34029212
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Голенков Владимирданные методы виртуальные?

Вроде, начинаю понимать... Их надо прописать виртуальными, чтобы создалась таблица методов? Прописал - не помогает.
...
Рейтинг: 0 / 0
03.10.2006, 16:02
    #34029228
шаблоны
Вроде, начинаю понимать... Их надо прописать виртуальными, чтобы создалась таблица методов? Прописал - не помогает.

неа, про виртуальные это я зря загнул..

что если вызывать с явной квалификацией: KhPipeDated::readData?
...
Рейтинг: 0 / 0
03.10.2006, 16:26
    #34029333
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Голенков Владимирчто если вызывать с явной квалификацией: KhPipeDated::readData?

Да. Получилось. Спасибо.

Значит все перегруженные паблик методы предка придется обернуть оболочками из шаблона? Значит я был прав в своем предположении?

Зачем это сделано не понятно? Ведь наложение перегруженных функций при инстанцировании шаблона с не допустимым типом можно так же обнаруживать при компиляции, как и обычное наложение перегруженных функций (наложение перегруженных фукций - я имею в виду, это перегруженные функции с одинаковыми параметрами).
...
Рейтинг: 0 / 0
03.10.2006, 16:46
    #34029420
шаблоны
Значит все перегруженные паблик методы предка придется обернуть оболочками из шаблона? Значит я был прав в своем предположении?

не, шаблон тут тоже не при чем

речь идет о том, что имена в производных классах скрывают идентичные имена из базовых классов. почему так сделано Страуструп где-то объяснял, не помню..

в общем, либо явно квалифицировать, либо вводить в обращение директивой using
...
Рейтинг: 0 / 0
03.10.2006, 17:33
    #34029561
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Голенков Владимир
в общем, либо явно квалифицировать, либо вводить в обращение директивой using

В смысле using?
...
Рейтинг: 0 / 0
03.10.2006, 17:38
    #34029583
шаблоны
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
template <class Reader>
class KhPipeDatedCb: public KhPipeDated
{
protected:

	using KhPipeDated::readData;

	int readData(int nPipe)
	{
		...
		readData(nPipe, &khPipeData);
		...
	}
...
};

...
Рейтинг: 0 / 0
03.10.2006, 17:52
    #34029637
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
шаблоны
Голенков Владимир
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
template <class Reader>
class KhPipeDatedCb: public KhPipeDated
{
protected:

	using KhPipeDated::readData;

	int readData(int nPipe)
	{
		...
		readData(nPipe, &khPipeData);
		...
	}
...
};



Понятно. Спасибо. Приму за факт, объяснение которому скрыто за пеленой мозгов умных разработчиков языка С++. ;)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / шаблоны / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]