2014-09-16 3 views
0

Я пытаюсь прочитать некоторый пример кода о неявном создании QVariants из значений перечисления. О следующей строке кода:Зачем передавать параметр шаблона в методе Qt

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

Я не очень понимаю, что цель Qt :: PenStyle в приведенном выше выражении. Я думаю, что Qt :: SolidLine уникален. Синтаксис в порядке? Если это не будет что-то вроде:

QVariant::fromValue(Qt::SolidLine) 

? Извините, если этот вопрос кажется немым.

+1

'Qt :: PenStyle' - это тип (перечисление), а' Qt :: SolidLine' - значение этого типа. – vahancho

+0

[Function template] (http://en.cppreference.com/w/cpp/language/function_template) – thuga

ответ

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) 

EDIT:
Если кто-то виры rised на 4 и хотят знать, как это работает: это то же самое, как если бы был способ (на самом деле он создается во время компиляции):

QVariant::fromValue(const QPen& pen); 

Когда вы вызываете этот метод с Qt::SolidLine компилятором использует неявный конструктор QPen(Qt::PenStyle style), чтобы создать новый временный объект QPen и передать его в качестве аргумента методу fromValue.

Смежные вопросы