Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Declaring a template class with two template params a friend in a non-template class

1 view
Skip to first unread message

A L

unread,
Aug 25, 2010, 1:22:34 PM8/25/10
to
I have an abstract class:

class Attribute { /* ...*/ };

Now I have another class:

template <typename T, typename U>
class Mgr
{
static U *create(const std::string k, std::string v)
{
static T *p = 0;
if (!p)
{
p = new T();
}
T &r = *p;
U *a = const_cast<U*>(r.get(k));
return a;
}
};

Both of these classes are declared/defined in different header files.

The problem is that the constructors of Attribute class are private so
I have to declare the Mgr class a friend of Attribute. That's what I
have a problem doing - I am having a difficult time with the template
syntax when it comes to declaring a template class (with two template
parameters) a friend in a non-template class - I am getting lots of
compilation errors on the friend template declaration. Can any kind
sole tell me how I am supposed to do it? Declare a template class with
two template parameters a friend in a non-template class???

-Thanks/AL

--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]

Daniel Krügler

unread,
Aug 25, 2010, 7:04:57 PM8/25/10
to
On 25 Aug., 19:22, A L <alapex0...@gmail.com> wrote:
> I have an abstract class:
>
> class Attribute { /* ...*/ };
>
> Now I have another class:
>
> template <typename T, typename U>
> class Mgr
> {
> static U *create(const std::string k, std::string v)
> {
> static T *p = 0;
> if (!p)
> {
> p = new T();
> }
> T &r = *p;
> U *a = const_cast<U*>(r.get(k));
> return a;
> }
>
> };
>
> Both of these classes are declared/defined in different header files.
>
> The problem is that the constructors of Attribute class are private so
> I have to declare the Mgr class a friend of Attribute. That's what I
> have a problem doing - I am having a difficult time with the template
> syntax when it comes to declaring a template class (with two template
> parameters) a friend in a non-template class - I am getting lots of
> compilation errors on the friend template declaration. Can any kind
> sole tell me how I am supposed to do it? Declare a template class with
> two template parameters a friend in a non-template class???

Yes, you just define Attribute as follows:

class Attribute {
template<class, class>
friend class Mgr;

/* ...*/
};

This grants friend access to a template named Mgr with
two type template parameters.

HTH & Greetings from Bremen,

Daniel Krügler

0 new messages