ID estático C ++ exclusivo e nome da classe com classe base
Having classTaskBase
, cada classe derivada dela deve ter nome e ID exclusiv
OTaskBase
é algo como abaixo:
class TaskBase
{
public:
static const int id()
{
// return an unique id, for each object or derived class, HOW ??
}
static const string name()
{
// return class name for each derived class, HOW ??
// for example : "TaskBase" for this class
}
};
A minha tentativa foi:
template <typename DERIVED>
class TaskBase
{
public:
static const int id()
{
static const int id = reinterpret_cast<int> (typeid (DERIVED).name());
return id;
}
static const string name()
{
static string n;
if (!n.size())
{
int status;
char *realname = abi::__cxa_demangle(typeid (DERIVED).name(), 0, 0, &status);
n = realname;
free(realname);
}
return n;
}
};
Já liest, mas eu preciso da capacidade de ter um ponteiro base para cada classe derivada, algo abaixo da linha:
class MyTask1 : public TaskBase
{
};
MyTask1 myTask1, myTask2;
TaskBase *base = &myTask1;