是否可以将函数返回的变量或值作为模板参数传递。
例:
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
.
是否可以将函数返回的变量或值作为模板参数传递? 如果没有,还有什么替代方法可以做到这一点?
如果模板具有非类型模板参数并且函数调用是常量表达式,则有可能。例如
#include <type_traits>
constexpr int foo() {
return 42;
}
template <int x>
std::integral_constant<int, x> bar() { return {}; }
int main() {
bar<foo()>();
}
我认为你根本不需要它,你可以使用
T QVariant::value(( const
您可以将生成的 T 提供给 qDebug(( 运算符<<。您可能需要定义如何打印 T,请查看:http://doc.qt.io/qt-4.8/qdebug.html#writing-custom-types-to-a-stream
for ( auto const & option : options)
qDebug() << option.value(); //returns T automatically