是否可以将变量/函数返回作为模板参数传递

时间:2017-07-06 21:47:24

标签: c++ qt templates qt5

是否可以将函数返回的变量或值作为模板参数传递。

示例:

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

是否可以将函数返回的变量或值作为模板参数传递?如果没有,有什么替代方法呢?

2 个答案:

答案 0 :(得分:3)

如果模板具有非类型模板参数并且函数调用是常量表达式,则可以。例如

#include <type_traits>

constexpr int foo() {
    return 42;
}

template <int x>
std::integral_constant<int, x> bar() { return {}; }

int main() {
    bar<foo()>();
}

答案 1 :(得分:0)

我认为你根本不需要它,你可以使用

T QVariant :: value()const

您可以将生成的T提供给qDebug()运算符&lt;&lt;。您可能需要定义打印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