How to specialize template for type derived from particular type
Posted
by
relaxxx
on Stack Overflow
See other posts from Stack Overflow
or by relaxxx
Published on 2012-03-30T11:27:12Z
Indexed on
2012/03/30
11:29 UTC
Read the original article
Hit count: 267
templates
I have class World
which manages creation of object... After creation it calls afterCreation
method and I the created object is user-defined type derived from Entity (eg. MyEntity
), I want to call addEntity
. I the object was something else, I want to do nothing.
addEntity
must be called with appropriate T
, because it generates unique IDs for every derived class etc.
Here is my solution:
template <int v>
struct ToType
{
enum { value = v };
};
template <typename T>
void World::afterCreation(T * t)
{
afterCreation(t, ToType<std::is_base_of<Entity, T>::value>());
}
template <typename T>
void World::afterCreation(T * t, ToType<true>)
{
addEntity(t); //here I cant pass Entity *, I need the real type, eg. MyEntity
}
template <typename T>
void World::afterCreation(T * t, ToType<false>)
{
}
My question is - Can in be done better way?
How can I simulate following code without ToType
or similar?
template <typename T>
void afterCreation(){/*generic impl*/}
template <typename T where T is derived from Entity>
void afterCreation(){/*some specific stuff*/}
- "specialize" in the title is only to describe my intention, no need to solve problem with template specialization
© Stack Overflow or respective owner