为什么要在Qt方法中传递模板参数

时间:2014-09-16 11:41:00

标签: qt casting

我试图阅读一些关于从枚举值隐式创建QVariants的示例代码。 关于以下代码行:

QVariant::fromValue<Qt::PenStyle>(Qt::SolidLine)

我真的不明白上面表达式中 Qt :: PenStyle 的目的是什么。 我认为Qt :: SolidLine是独一无二的。 语法还可以吗? 不应该是这样的:

QVariant::fromValue(Qt::SolidLine)

? 对不起,这个问题似乎很愚蠢。

1 个答案:

答案 0 :(得分:2)

您可以使用此表单:

1) QVariant::fromValue(Qt::SolidLine)

QVariant::fromValue(const T & value)是一种template方法。调用模板方法或函数时,可以指定应该调用此方法的参数类型。如果您不这样做,编译器会尝试为您执行此操作。这就是1)等于这个原因:

2) QVariant::fromValue<Qt::PenStyle>(Qt::SolidLine)

但您可以为int调用此方法并传递enum value(如果您不在c ++ 11 ,则为):

3) QVariant::fromValue<int>(Qt::SolidLine)

甚至强制创建QPen

4) QVariant::fromValue<QPen>(Qt::SolidLine)

编辑:
如果有人对4感到惊讶并想知道它是如何工作的:它就像有一个方法一样(实际上它是在编译期间创建的):

QVariant::fromValue(const QPen& pen);

当您使用Qt::SolidLine调用此方法时,编译器使用隐式构造函数QPen(Qt::PenStyle style)来创建新的临时QPen对象,并将其作为参数传递给方法fromValue