* mathieu:
> Hi there,
>
> I am reading the following post:
>
> http://groups.google.com/group/comp....05ab0a765aa0ad
>
> And I do not understand the following:
>
> ...
> - static polymorphism which allows the inheritance or cooperation of
> traits and useful specialization under metaprogramming (factorizing
> operations by example).
> ...
>
> So as in the original post, I do not understand what is the added
> value of CRTP. Could someone please provide an example where
> inheritance of traits clearly requires CRTP, thanks !
I've got a headache so I'm not going to look up the original thread.
But here's an example of CRTP in action, off the cuff (may have syntax erors):
#include <iostream>
using namespace std;
template< class WorkerKind >
struct Worker
{
void sayHello() const
{
WorkerKind const& self = *static_cast<WorkerKind const*>( this );
cout << "Hello, I'm a " << self.kind() << "!" << endl;
}
};
struct Electrician: Worker<Electrician>
{
char const* kind() const { return "electrician"; }
};
struct Plumber: Worker<Plumber>
{
char const* kind() const { return "plumber"; }
}
int main()
{
Plumber().sayHello();
Electrician().sayHello();
}
Oh well it's not inheritance of "traits", didn't see that.
Cheers & hth.,
- Alf