Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / дружественная функция шаблонного класса / 15 сообщений из 15, страница 1 из 1
17.01.2007, 12:09
    #34261200
vain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
Стоит задача: создать шаблон класса A и производный от него шаблон класса B, при этом функция f1 шаблонного класса B должна быть дружественной шаблонному классу A.

Пытаюсь делать так, ан нет, не компилится:

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
template <class T>
class B;

template <class T>
class A
{
friend void B<T>::f1();
public:
	A(T _x) {x = _x;}
	T getX() {return x;}
protected:
	T x;
};

template <class T>
class B : public A<T>
{
public:
	B(T _x, T _y);
	T getY() {return y;}
	void f1() {cout << y << endl;}
protected:
	T y;
};

template <class T>
B<T>::B(T _x, T _y)
	: A<T>(_x)
{
	y = _y;
}


int main()
{
	B<int> b1( 2 ,  30 );
	B<char> b2('a', 'n');

	cout << b1.getX() << ' ' << b1.getY() << endl;
	cout << b2.getX() << ' ' << b2.getY() << endl;

	return  0 ;
}

Как сделать правильно?

P.S. Не спрашивайте, зачем это надо. Такие странные задания дают в нашем институте.
...
Рейтинг: 0 / 0
17.01.2007, 12:47
    #34261366
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
vainПытаюсь делать так, ан нет, не компилится:


Рассматривай темплеты как сильно усовершенствованные макросы, т.е. средство реализуемое ПРЕпроцессором. Фактически ты хочешь подружить метод МАКРОСА с реализацией своего класса, что заведомо обречено на неудачу.

Если задание было ИМЕННО таким (исходных данных задачи не углядел), сочувстыую и ничем не могу помочь
...
Рейтинг: 0 / 0
17.01.2007, 12:58
    #34261413
дружественная функция шаблонного класса
Рассматривай темплеты как сильно усовершенствованные макросы, т.е. средство реализуемое ПРЕпроцессором. Фактически ты хочешь подружить метод МАКРОСА с реализацией своего класса, что заведомо обречено на неудачу.

очень странно такое слышать..
пример прекрасно компилируется на g++ (GCC) 3.2.3

2автор: какой используется компилятор?
...
Рейтинг: 0 / 0
17.01.2007, 13:17
    #34261522
fixit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
И чему только вас там в школе учат..? Уши надо надрать тому кто тебе это задал. В реальной жизни такое извращение не встретишь.
P.S. ms vc6 не компилит твой пример :(
...
Рейтинг: 0 / 0
17.01.2007, 13:29
    #34261572
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
msdnAlthough functions with global scope can be declared as friends prior to their prototypes, member functions cannot be declared as friends before the appearance of their complete class declaration.
...
Рейтинг: 0 / 0
17.01.2007, 13:31
    #34261593
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
подозреваю, что наследоваться от класса А можно тоже только после его полного объявления, поэтому придётся объявлять весь класс В френдом.
...
Рейтинг: 0 / 0
17.01.2007, 13:38
    #34261620
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
Голенков Владимир Рассматривай темплеты как сильно усовершенствованные макросы, т.е. средство реализуемое ПРЕпроцессором. Фактически ты хочешь подружить метод МАКРОСА с реализацией своего класса, что заведомо обречено на неудачу.

очень странно такое слышать..
пример прекрасно компилируется на g++ (GCC) 3.2.3

2автор: какой используется компилятор?

Странно слышать - не слушай. Я понимаю, что в лучшем из миров это ДОЛЖНО работать, но VCPP сего не поддерживает совершенно точно А я очень не люблю финтов, для которых надо спрашивать "какой компилятор". Преподавателя за такое драть однозначно, теоретик блинн
...
Рейтинг: 0 / 0
17.01.2007, 14:57
    #34261944
дружественная функция шаблонного класса
Странно слышать - не слушай.

ну вот горячиться точно не надо, это же не холивар :)
мне показалось не слишком корректным смешивание языковых и надъязыковых средств (макросы и препроцессор), только и всего

Я понимаю, что в лучшем из миров это ДОЛЖНО работать, но VCPP сего не поддерживает совершенно точно

к слову сказать, vcpp 8 это скушал
а вот unbound template members увы никто из доступных компиляторов не разумеет :(

А я очень не люблю финтов, для которых надо спрашивать "какой компилятор".

это не финт, а стандарт языка, который постоянно уточняется
т.е. рано или поздно будет поддерживаться повсеместно
возможно, сейчас использовать еще не время, но изучать стоит

Преподавателя за такое драть однозначно, теоретик блинн

это видимо учебный пример, на знание аспектов текущего стандарта..
...
Рейтинг: 0 / 0
17.01.2007, 15:05
    #34261994
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
Я и не горячусь просто предпочитаю работать с тем, что РАБОТАЕТ сейчас, а не в прекрасном далеко.
Можешь предложить пример когда нельзя обойтись без подобного уродства ?
...
Рейтинг: 0 / 0
17.01.2007, 15:46
    #34262135
дружественная функция шаблонного класса
Можешь предложить пример когда нельзя обойтись без подобного уродства ?

обойтись можно, не вопрос, даже без виртуальных функций ;)

а так да, используется, в библиотеках шаблонов например
...
Рейтинг: 0 / 0
17.01.2007, 15:54
    #34262162
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
boost рулит, теперь понятно аочему сие заработало в VC8
...
Рейтинг: 0 / 0
17.01.2007, 17:19
    #34262493
vain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
Я смотрю, не только мне это задание показалось странным. Это действительно просто учебный пример, который должен быть выполнен именно в такой формулировке.

Пробовал компилить в VC++ 6.0, VC++ .NET 2003, C++ Builder 2006. Ни в одном не получилось. Только что попробовал в gcc 3.3.3 – все отлично компилится и правильно работает.

В связи с этим возник вопрос: правилен ли мой код в соответствии со стандартом языка и проблема заключается в компиляторах от Microsoft и Borland, ограниченно поддерживающих стандарт?
...
Рейтинг: 0 / 0
17.01.2007, 18:01
    #34262678
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
Голенков Владимир пишет:

> мне показалось не слишком корректным смешивание языковых и надъязыковых
> средств (макросы и препроцессор), только и всего

МАКРОСЫ НАДЪЯЗЫКОВОЕ СРЕДСТВО ? Дааа. А ничего, что язык без этого
средства вообще не работает и не существует ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17.01.2007, 18:15
    #34262721
дружественная функция шаблонного класса
МАКРОСЫ НАДЪЯЗЫКОВОЕ СРЕДСТВО ?

ну да, фазы препроцессирования и компиляции четко разнесены
т.е. легко отчуждаемы (гипотетически)

Дааа. А ничего, что язык без этого средства вообще не работает и не существует ?

.. как и без редактора исходных текстов %)
...
Рейтинг: 0 / 0
18.01.2007, 11:08
    #34263945
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дружественная функция шаблонного класса
MasterZivМАКРОСЫ НАДЪЯЗЫКОВОЕ СРЕДСТВО ? Дааа. А ничего, что язык без этого
средства вообще не работает и не существует ?боян, в поиск, работает и существует.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / дружественная функция шаблонного класса / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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