Как объявить шаблон другом класса.
Вроде того
class X
{
template<class T> friend struct A;
};
template<class T>
struct A{};
Здравствуйте 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
Здравствуйте Micker, Вы писали:
M>так что у тебя всё ок, если только это не нужно писать на VC 6.0
Да значит все-таки не Ok
Я думал это я уже туплю, оказывается все-таки компилятор.
Не понимает этого VC6.
Даже посмотрел
C++ Standard Noncompliance Issues with Visual C++ 6_0
там такого не упоминается, вот я и засомневался.
Здравствуйте 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();
}
Здравствуйте 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;
};
Здравствуйте 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? Просто не могу сейчас проверить.
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? Просто не могу сейчас проверить.
Компилится без проблем.
Здравствуйте 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!!! Даже если убрать дружественность!