Шаблон друг ?
От: Dima2  
Дата: 16.04.02 19:30
Оценка:
Как объявить шаблон другом класса.
Вроде того


class X
{
    template<class T> friend struct A;
};

template<class T>
struct A{};
Re: Шаблон друг ?
От: Micker  
Дата: 17.04.02 00:05
Оценка:
Здравствуйте Dima2, Вы писали:

D>Как объявить шаблон другом класса.

D>Вроде того

D>
D>class X
D>{
D>    template<class T> friend struct A;
D>};
D>template<class T>
D>struct A{};
D>


Ну вроде как вот так:

template<class T>
struct A{};

class X
{
    template<class T> friend struct A;
};


тока VC 60 не скомпилялось, а BC 5.2 — ОК,
и в стандарте есть упоминание (14.5.3.4),
даже пример приводится:

class X
{
       template<class T> friend struct A;
       class Y {};
}

template<class T> struct A { X::Y ab; }



так что у тебя всё ок, если только это не нужно писать на VC 6.0
Жизнь, как игра —
идея паршивая,
графика обалденная...
Re[2]: Шаблон друг ?
От: Dima2  
Дата: 17.04.02 04:10
Оценка:
Здравствуйте Micker, Вы писали:

M>так что у тебя всё ок, если только это не нужно писать на VC 6.0


Да значит все-таки не Ok
Я думал это я уже туплю, оказывается все-таки компилятор.
Не понимает этого VC6.

Даже посмотрел
C++ Standard Noncompliance Issues with Visual C++ 6_0


там такого не упоминается, вот я и засомневался.
Re: Шаблон друг ?
От: Toughpheeckouse Россия  
Дата: 17.04.02 06:13
Оценка:
Здравствуйте Dima2, Вы писали:

вот такое съедает VC 6.0


template<class T> class B;

template<class T>
class A
{
    friend class B<T>;
    private:
        long aaa;
    public:
        A(long _aaa) : aaa(_aaa)
        {
        }
};

template<class T>
class B
{
    A<T> *a;
public:
    B(A<T>* _a): a(_a)
    {
    }
    long GetA()
    {
        return a->aaa;
    }
};


class C
{
};

void main
{
  A<C> a(111);
  B<C> b(&a);
  long aaa = b.GetA();
}
Думайте сами, решайте сами...
Re: Шаблон друг ?
От: StanislavK Великобритания  
Дата: 17.04.02 06:20
Оценка: 5 (1)
Здравствуйте Dima2, Вы писали:

D>Как объявить шаблон другом класса.

D>Вроде того


D>
D>class X
D>{
D>    template<class T> friend struct A;
D>};

D>template<class T>
D>struct A{};
D>


Так не подойдет?
template<class T> struct foo1;

class foo {
    friend struct foo1;
    class A{
    };
};

template <class T>
struct foo1 {
    foo::A a;
};
Re[2]: Шаблон друг ?
От: Аноним  
Дата: 17.04.02 06:33
Оценка:
Здравствуйте Toughpheeckouse, Вы писали:

Ну это несколько не то что хотелось бы, нужен друг именно для нешаблонного класса. Хотя может можно как-то обойти через некий промежуточный класс.
Re[2]: Шаблон друг ?
От: Аноним  
Дата: 17.04.02 06:40
Оценка:
Здравствуйте StanislavK, Вы писали:

SK>Здравствуйте Dima2, Вы писали:


D>>Как объявить шаблон другом класса.

D>>Вроде того


D>>
D>>class X
D>>{
D>>    template<class T> friend struct A;
D>>};

D>>template<class T>
D>>struct A{};
D>>


SK>Так не подойдет?

SK>
SK>template<class T> struct foo1;

SK>class foo {
SK>    friend struct foo1;
SK>    class A{
SK>    };
SK>};

SK>template <class T>
SK>struct foo1 {
SK>    foo::A a;
SK>};
SK>

А это компилится в VC6? Просто не могу сейчас проверить.
Re[3]: Шаблон друг ?
От: StanislavK Великобритания  
Дата: 17.04.02 06:55
Оценка:
SK>>Так не подойдет?
SK>>
SK>>template<class T> struct foo1;

SK>>class foo {
SK>>    friend struct foo1;
SK>>    class A{
SK>>    };
SK>>};

SK>>template <class T>
SK>>struct foo1 {
SK>>    foo::A a;
SK>>};
SK>>

А>А это компилится в VC6? Просто не могу сейчас проверить.

Компилится без проблем.
Re[4]: Шаблон друг ?
От: KA it-knowledge-base.blogspot.com
Дата: 17.04.02 14:37
Оценка:
Здравствуйте StanislavK, Вы писали:


SK>>>Так не подойдет?

SK>>>
SK>>>template<class T> struct foo1;

SK>>>class foo {
SK>>>    friend struct foo1;
SK>>>    class A{
SK>>>    };
SK>>>};

SK>>>template <class T>
SK>>>struct foo1 {
SK>>>    foo::A a;
SK>>>};
SK>>>

А>>А это компилится в VC6? Просто не могу сейчас проверить.

SK>Компилится без проблем.


Только в VC6!!! Даже если убрать дружественность!
//
#import <windows.bas>
class IWindows9x:protected DOS { private: virtual HANDLE EnumClouds()=0; };
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.