Topic: HELP: Problem with friend who is class template
Author: Alex Vinokur <alexander.vinokur@telrad.co.il>
Date: 1999/07/06 Raw View
In article <7lmcmg$het$1@nnrp1.deja.com>,
Timothy Miller <tim@techsource.com> wrote:
[snip]
> Ok, so what is the proper syntax to declare that a template is a
friend
> of a non-template?
>
[snip]
Hi,
Here is an example of template friend classes
for various situations.
Alex
//#########################################################
//------------------- C++ code : BEGIN -------------------
//---------------------------------------------
template <typename T1, typename T2, typename T3>
class FFF;
//---------------------------------------------
class AAA {public : AAA (); };
//---------------------------------------------
template <typename T1> class BBB1 {public : BBB1 (); };
template <typename T1> class BBB2 {public : BBB2 (); };
template <typename T1> class BBB3 {public : BBB3 (); };
//---------------------------------------------
template <typename T1, typename T2> class CCC1 {};
template <typename T1, typename T2> class CCC2 {};
template <typename T1, typename T2> class CCC3 {};
template <typename T1, typename T2> class CCC4 {};
template <typename T1, typename T2> class CCC5 {};
//---------------------------------------------
template <typename T1, typename T2, typename T3> class DDD1 {};
template <typename T1, typename T2, typename T3> class DDD2 {};
template <typename T1, typename T2, typename T3> class DDD3 {};
template <typename T1, typename T2, typename T3> class DDD4 {};
template <typename T1, typename T2, typename T3> class DDD5 {};
//---------------------------------------------
template <typename T1, typename T2, typename T3, typename T4> class EEE1
{};
//---------------------------------------------
//---------------------------------------------
//---------------------------------------------
template <typename T1, typename T2, typename T3>
class FFF
{
//-----
friend class AAA;
//-----
friend class BBB1<int>;
friend class BBB2<T1>;
template <typename S1> friend class BBB3;
//-----
friend class CCC1<int, float>;
friend class CCC2<int, T2>;
friend class CCC2<T1, int>;
friend class CCC3<T1, T2>;
friend class CCC3<T1, T3>;
friend class CCC3<T2, T3>;
friend class CCC3<T3, T2>;
template <typename S2> friend class CCC4<int, S2>;
template <typename S1, typename S2> friend class CCC5;
//-----
friend class DDD1<int, char, float>;
friend class DDD2<int, T2, float>;
friend class DDD2<int, T3, float>;
friend class DDD3<T1, T2, T3>;
friend class DDD3<T1, T3, T2>;
template <typename S1, typename S2> friend class DDD4<T1, S2, S1>;
template <typename S1, typename S2, typename S3> friend class DDD5;
//-----
template <typename S> friend class EEE1<T1, T2, S, T3>;
//-----
private :
FFF (T1 t1) {}
public :
~FFF () {}
};
//---------------------------------------------
//---------------------------------------------
AAA::AAA ()
{
FFF<int, char, float> (5);
}
template <typename T1>
BBB1<T1>::BBB1 ()
{
FFF<T1, double, float> (T1 ());
};
template <typename T1>
BBB2<T1>::BBB2 ()
{
FFF<T1, double, float> (T1 ());
};
class YYY {};
template <typename T1>
BBB3<T1>::BBB3 ()
{
FFF<YYY, double, float> (YYY ());
};
class XXX {};
int main ()
{
AAA a;
BBB1<int> b1;
BBB2<int> b2;
BBB2<char> b3;
BBB2<XXX> b4;
BBB3<XXX> b5;
return 0;
}
//------------------- C++ code : END ----------------------
//#########################################################
//------------------- Compiler & System ------------------
g++ -v : gcc version egcs-2.91.57 19980901
(egcs-1.1 release)
uname -a : SunOS <nodename> 5.6 Generic_105181-09
sun4m sparc SUNW,SPARCstation-5
//---------------------------------------------------------
//#########################################################
Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.
[ Send an empty e-mail to c++-help@netlab.cs.rpi.edu for info ]
[ about comp.lang.c++.moderated. First time posters: do this! ]
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://reality.sgi.com/austern_mti/std-c++/faq.html ]