powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / дружественная функция шаблонного класса
15 сообщений из 15, страница 1 из 1
дружественная функция шаблонного класса
    #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
дружественная функция шаблонного класса
    #34261366
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vainПытаюсь делать так, ан нет, не компилится:


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

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

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

2автор: какой используется компилятор?
...
Рейтинг: 0 / 0
дружественная функция шаблонного класса
    #34261522
fixit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чему только вас там в школе учат..? Уши надо надрать тому кто тебе это задал. В реальной жизни такое извращение не встретишь.
P.S. ms vc6 не компилит твой пример :(
...
Рейтинг: 0 / 0
дружественная функция шаблонного класса
    #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
дружественная функция шаблонного класса
    #34261593
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подозреваю, что наследоваться от класса А можно тоже только после его полного объявления, поэтому придётся объявлять весь класс В френдом.
...
Рейтинг: 0 / 0
дружественная функция шаблонного класса
    #34261620
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Голенков Владимир Рассматривай темплеты как сильно усовершенствованные макросы, т.е. средство реализуемое ПРЕпроцессором. Фактически ты хочешь подружить метод МАКРОСА с реализацией своего класса, что заведомо обречено на неудачу.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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