【发布时间】:2011-10-07 18:59:45
【问题描述】:
拥有类TaskBase,它的每个派生类都必须有名称和唯一ID。
TaskBase 如下所示:
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
}
};
我的尝试是:
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;
}
};
我已经阅读了this,但我需要能够拥有指向每个派生类的基指针,如下所示:
class MyTask1 : public TaskBase
{
};
MyTask1 myTask1, myTask2;
TaskBase *base = &myTask1;
【问题讨论】:
-
展示TaskBase::id和TaskBase::name的一些用例。