template<class T>
bool SameValue( const QVariant & v, const T & value )
{
return v.canConvert<T>(value) && (v.value<T>() == value);
}
canСonvert наоборот, не нужно, требуется float(0) != int(0)
return (v.type() == qMetaTypeId<T>()) && (v.value<T>() == value);
Да, оно, глянул в отладчике - именно так заряжается type в setValue. Спасибо
Правда возникают мелкие непрятности - не могу свитчеваться
C++ (Qt)
switch (v.type()) {
...
case (QVariant::Type) QMetaType::QMatrix4x4: // Ok, такой имеется
SetUniformMatr4(name, v.value<QMatrix4x4>());
break;
case (QVariant::Type) QMetaType::QMatrix3x3: // error: а Чебурашки нет :-(
SetUniformMatr3(name, v.value<QMatrix3x3>());
break;
default:
Q_ASSERT(0);
break;
}
Ну наверно это непобедимо т.к. metaType регистрируется в runtime. Или с новыми стандартами все-таки "можна"?