1

我想将类型作为参数(不是变量或引用)传递。

我有这个工作代码:

执行代码,其中“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);

注意:没有“新”,这不是创建实例,只是传递类的名称,所以:

  1. 这甚至可能吗?
  2. 如果是这样,怎么做?
4

2 回答 2

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;
于 2013-10-30T15:00:14.990 回答
0

对于学习状态模式, C++ 中状态设计模式中的示例可能是一个很好的起点。

于 2013-10-30T15:32:25.450 回答