Boost logo

Boost :

From: Rob Stewart (stewart_at_[hidden])
Date: 2004-04-02 11:10:48

From: "Hurd, Matthew" <hurdm_at_[hidden]>
> From: boost-bounces_at_[hidden]
> [mailto:boost-bounces_at_[hidden]]
> > On Behalf Of David Abrahams
> > > Rob Stewart <stewart_at_[hidden]> writes:
> >
> Can a method call be part of a trait class? I don't think traits should

In my book, certainly.

> have anything to do with enacting behaviour (they may describe it).

I don't agree.

> If it is not clear and I see a method I think of it as policy-like. A
> collection of types and static constants and I think of it as
> trait-like.

I only think of policies as template parameters that inject
types, values, and functions to control the template. I think of
traits as standalone entities known by their names. (That's not
to say the latter can't be passed to a template to be used as the

> Traits are used to get information at compile time. Policies are used
> to modify behaviour. Traits could be used by a client to modify
> behaviour which makes them feel like a policy class, but they aren't in
> what we normally think of as a policy.

That's where we differ. In your example, the traits class is a
policy class precisely because it is passed as a template

> If a trait is used to direct the modification of behaviour, is it a
> policy from the client classes point of view I guess... which points to
> the terminology confusion.

A traits class is always used within the implementation by its
well-known name.

> Policies can be chained, multiply inherited from or just be ordinary
> template classes with static methods, maybe such different styles should
> have different names... a chain aspect, a base aspect (MCD-like), a
> static aspect...

I don't see how being able to chain policies requires a new name.

Rob Stewart                           stewart_at_[hidden]
Software Engineer           
Susquehanna International Group, LLP  using std::disclaimer;

Boost list run by bdawes at, gregod at, cpdaniel at, john at