我想传递一个类型作为参数(不是变量或引用)。
我有这个工作代码:
执行代码,其中“testState2”是类的名称(即本例中的类型)。 注意它的基本类型为state_t:
changeState(new testState2());
更改状态功能:
void state_t::changeState(state_t * new_state)
{
// Check if the state has changed
if (this != new_state)
{
qDebug() << this->name << ": State changed to: " << new_state->name;
delete this;
_state = new_state;
}
else
{
qDebug() << this->name << ": State un-changed";
}
}
在这段代码中,我基本上创建了一个testState2的新实例,但我想进一步简化调用代码。我想传递类型,如下:
changeState(testState2);
注意:没有“new”,这不是创建实例,只是传递类的名称,所以:
答案 0 :(得分:3)
C ++中的类(以及一般类型)不是一等值,因此无法传递或存储。
对于类,理论上你可以使用typeid
,但最常见的是我发现在实例中使用虚函数返回的字符串以及实现“虚拟构造函数”模式的注册表更有用。
struct Base
{
virtual const char *class_name() = 0;
...
};
struct MyClass : public(Base)
{
virtual const char *class_name() { return "MyClass"; }
...
}
std::map<std::string, Base *(*)()> instance_builders;
答案 1 :(得分:0)
用于学习状态模式,例如 State Design Pattern in C++可能是一个很好的起点。