Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QVariant использование в switch


Автор: ss 13.5.2017, 22:12
есть некая функ. MyFunc, Входным параметром будет QVariant. В зависимости от типа параметра должны выполняться какие-либо действия. чтобы уменьшить код и улучшить читаемость пытаюсь сделать функцию которая будет подставляться в switch и выдавать данное case. Функция имеет входной параметр который будет типом.

пример.
void MyFunc(QVariant &param){
  switch(param.type){
  case fromType(int) : break;
  case fromType(MyClass) : break}
}

можно ли такое сделать ? Через if (dynamic_cast<>()) такое плохо выглядит.
Пытался вот так сделать :

Код

template <class T>
constexpr
QVariant::Type getType()
{
    T t;
    return QVariant::fromValue(t).type();
}

QVariant f ;
    switch (f.type())
    {
    case getType<int>():        break;
    default:        break;
    }


Автор: ss 15.5.2017, 11:57
решил так:

Код

int value = 0;
    QVariant var = QVariant::fromValue(value);

    switch(var.type())
    {
    case QMetaTypeId2<int>::qt_metatype_id(): qDebug()<<"int"; break;
    case QMetaTypeId2<float>::qt_metatype_id():  qDebug()<<"float"; break;
    }


это действует только для базовых типов (int, float)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)