如何在c ++中将类型作为参数传递?

时间:2013-10-30 14:53:05

标签: c++ function-parameter

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

我有这个工作代码:

执行代码,其中“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”,这不是创建实例,只是传递类的名称,所以:

  1. 这可能吗?
  2. 如果是这样,怎么样?

2 个答案:

答案 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++可能是一个很好的起点。