2012-03-20 6 views
1

СитуациюКак назвать Неспециализированную версию шаблонной функции QList :: оператор <<

У меня есть QList<QVariant> где каждый QVariant элемент должен быть QList<QVariant> своими собственным. Чтобы заполнить список, я хочу использовать QList::operator<<, который перегружен, чтобы взять как const T & value, так и более специализированный const QList<T> & other.

Проблема

Когда я запускаю следующий код:

QList<QVariant> rootList; 
QList<QVariant> subList = QList<QVariant>() << 1 << 2 << 3; 
rootList << subList; 

Последняя строка здесь будет вызывать функцию operator<< (const QList<T> & other), насколько я знаю, потому что это более специализированная функция, соответствует типу subList. Результирующий список будет выглядеть следующим образом:

rootList: [1, 2, 3] 

Когда вместо этого я хочу, чтобы выглядеть следующим образом:

rootList: [[1, 2, 3]] 

Как заставить вызов к неспециализированной версии QList::operator<<?

Обход

Я понимаю, что есть QList::push_back функция, которая не перегружена для QList<T>, и делает то, что я ищу. Однако я не хочу полагаться на функцию, которая была «предоставлена ​​только для совместимости с STL».

ответ

3

Вы можете явно привести к QVarinatListQVarinat:

rootList << (QVariant)subList; 

или

rootList << QVariant(sublist); 
+0

Я не очень знаком с Qt, но у меня есть ощущение, что обычное функциональное обозначение будет более привычным и более Явный: 'rootList << QVariant (sublist);' –

+0

@LucDanton, это ваш выбор. Я добавлю к сообщению как альтернативу – Lol4t0

+0

Отлично, спасибо! Я предполагаю, что static_cast (subList) является предпочтительной формой. – AerandiR

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