Друг шаблона - параметр шаблона
От: Аноним  
Дата: 20.08.08 11:16
Оценка:
Привет всем!

Возник вот вопрос:


template <
           class Owner
         > class A
{                     
public:
     friend class Owner; /* как вот в этом месте заставить компилятор поверить, что Owner действительно друг? */
private:
     void test() { std::cout << "A::test\n"; }
};

class B
{
public:
     A<B> a;
     void test()
     {
          a.test();
     }
};

int main(int, char**)
{
     B b;
     b.test();
     
     return 0;
}
Re: Друг шаблона - параметр шаблона
От: _NaN_ Россия www.elangroup-software.com
Дата: 20.08.08 11:33
Оценка:
Здравствуйте, Аноним, Вы писали:


А> friend class Owner; /* как вот в этом месте заставить компилятор поверить, что Owner действительно друг? */



friend typename Owner;
Re[2]: Друг шаблона - параметр шаблона
От: Аноним  
Дата: 20.08.08 11:37
Оценка:
Здравствуйте, _NaN_, Вы писали:

_NN>Здравствуйте, Аноним, Вы писали:



А>> friend class Owner; /* как вот в этом месте заставить компилятор поверить, что Owner действительно друг? */



_NN>
_NN>friend typename Owner; 
_NN>


Неа
Вот так ругается компилятор:

2.cpp:10: error: expected nested-name-specifier before "Owner"
2.cpp:10: error: ISO C++ forbids declaration of `Owner' with no type
2.cpp:10: error: `Owner' is neither function nor member function; cannot be declared friend
2.cpp: In member function `void B::test()':
2.cpp:12: error: `void A<Owner>::test() [with Owner = B]' is private
2.cpp:21: error: within this context

П.С.
MingW — 3.4.5
Re: Друг шаблона - параметр шаблона
От: GGoga  
Дата: 20.08.08 11:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Возник вот вопрос:

А>...

Точно такой же здесь
Автор: GGoga
Дата: 15.08.08
вопрос я задавал чуть менее недели назад
Ответ: напрямую так делать нельзя! Стандарт запрещает.
Re[2]: Друг шаблона - параметр шаблона
От: Аноним  
Дата: 20.08.08 11:57
Оценка:
Здравствуйте, GGoga, Вы писали:

GG>Здравствуйте, Аноним, Вы писали:


А>>Возник вот вопрос:

А>>...

GG>Точно такой же здесь
Автор: GGoga
Дата: 15.08.08
вопрос я задавал чуть менее недели назад

GG>Ответ: напрямую так делать нельзя! Стандарт запрещает.

Гы Как все-таки тесен мир. Ладно будем думать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.