Как вы передаете тип в качестве параметра в C ++?

Я хочу передать тип в качестве параметра (не переменная или ссылка).

У меня есть этот рабочий код:

код выполнения, где «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. Если так, то как?

0

Решение

Классы (и типы в целом) в 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;
3

Другие решения

Для изучения модели состояния, пример на
State Design Pattern в C ++ может быть хорошей отправной точкой.

0

По вопросам рекламы [email protected]