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

Template classes with static members

0 views
Skip to first unread message

Jonathan Lee

unread,
Jul 29, 2010, 12:53:17 PM7/29/10
to
Hi all,
I have a couple situations where I've written a template class that
has static data or static functions that are the exact same no matter
what the template type is. So I've been pulling the code out into a
dummy namespace, or a dummy class that the template inherits from
because I don't want the code duplicated. But *then* I figure this
stuff doesn't belong in a header so I move that stuff to a .cpp file,
which destroys one of the things I like about templates: everything
in one header.

Is there a better way to:
- avoid code/data duplication
- hide these functions from the outside world
- ideally keep it all in one header

--Jonathan

Victor Bazarov

unread,
Jul 29, 2010, 4:36:20 PM7/29/10
to
On 7/29/2010 12:53 PM, Jonathan Lee wrote:
> Hi all,
> I have a couple situations where I've written a template class that
> has static data or static functions that are the exact same no matter
> what the template type is.

Looks like a candidate for a base class (or class template).

> So I've been pulling the code out into a
> dummy namespace, or a dummy class that the template inherits from
> because I don't want the code duplicated.

Not sure why you designate them "dummy", but OK.

> But *then* I figure this
> stuff doesn't belong in a header so I move that stuff to a .cpp file,
> which destroys one of the things I like about templates: everything
> in one header.

Uh... You *figure* "this stuff doesn't belong in a header" - how do you
figure that? If you like everything in one header, then keep it there, no?

> Is there a better way to:
> - avoid code/data duplication
> - hide these functions from the outside world
> - ideally keep it all in one header

Uh... The last two requirements are conflicting, don't you think?

V
--
I do not respond to top-posted replies, please don't ask

Jonathan Lee

unread,
Jul 29, 2010, 4:56:12 PM7/29/10
to
On Jul 29, 4:36 pm, Victor Bazarov <v.baza...@comcast.invalid> wrote:
> On 7/29/2010 12:53 PM, Jonathan Lee wrote:
> > But *then* I figure this
> > stuff doesn't belong in a header so I move that stuff to a .cpp file,
> > which destroys one of the things I like about templates: everything
> > in one header.
>
> Uh...  You *figure* "this stuff doesn't belong in a header" - how do you
> figure that?  If you like everything in one header, then keep it there, no?

If they were trivial functions I would inline them and throw
them in the header. But when they're not... it just seems
contrary to practice to do that. I guess it's a case of having
your cake and eating it, too.

> >    Is there a better way to:
> >      - avoid code/data duplication
> >      - hide these functions from the outside world
> >      - ideally keep it all in one header
>
> Uh...  The last two requirements are conflicting, don't you think?

It sounds like it. But a common base class with protected
members basically satisfies both. I guess that's about the
cleanest approach.

Just the "inline"-ing bothers me.

--Jonathan

Juha Nieminen

unread,
Jul 30, 2010, 6:55:00 AM7/30/10
to
Jonathan Lee <jonathan...@gmail.com> wrote:
> Is there a better way to:
> - avoid code/data duplication
> - hide these functions from the outside world
> - ideally keep it all in one header

You could always make the static member private in the base class and
then declare the derived classes as friends.

0 new messages