是否可以将函数返回的变量或值作为模板参数传递。是否可以将变量/函数返回值作为模板参数
例子:
QVariantHash options;
options.insert("fontStyle", fontStyleObject); // QFont fontStyleObject
options.insert("fontColor", fontColorObject); // QColor fontColorObject
Q_FOREACH(const QVariant &option, options){
qDebug() << option.value<option.typeName()>();
}
正如你所看到的,我已经通过了option.typeName()
作为模板参数和方法返回的对象QString
的类型。
我已经做到了,但有一个错误信息:error: C2974: 'QVariant::value': invalid template argument for 'T', type expected
。
是否有可能通过一个变量或函数作为模板参数返回的值?如果没有,那么做什么替代方法?
所有模板魔术发生在编译时。在编译时,所有模板实例化的所有类型都必须已知。如果'option.typeName()'在编译时可能是已知的(例如,它是QVariantHash实例的某种依赖类型,我怀疑它),那么你可以。否则,你不能。 – iehrlich
另外,不会'qDebug()<< option.toString()'在你的特定情况下工作吗?我的意思是,你试图序列化它,对吧? – iehrlich
@iehrlich:别担心,这行'qDebug()<< option.value();'只是一个例子。 –