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

is it possible to passing a variable/function-return as a template argument

本文关键字:参数传递 返回 函数 变量 是否      更新时间:2023-10-16

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

例:

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