как написать вложенный список инициализаторов, например, QVector из QPairs

Предупреждение:

qvector.h(509): предупреждение C4127: условное выражение является константой (main.cpp) qvector.h(506): при компиляции функции-члена шаблона класса 'QVector>::QVector(std::initializer_list)' компилируется с [T =QPair]

см. ссылку на создание экземпляра шаблона функции 'QVector>::QVector(std::initializer_list)', который компилируется

мой код:

QVector< QPair< double, float> > container(
        {{40, 0.0f},
         {70, 0.95f},
         {80, 0.7f}}
);

Он отлично строится, я просто хочу, чтобы предупреждения исчезли (без изменения уровня предупреждения). Что я делаю неправильно?

/* редактировать */

Ни у кого нет комментариев по поводу предупреждения? что именно это означает?, есть ли у других людей предупреждение? Я просмотрел документацию QT по спискам инициализаторов для QVectors, и это мало что сказало. Никто ничего не может сказать в целом о инстанцировании шаблона функции?


person codeMetis    schedule 04.05.2017    source источник
comment
пропущенная точка с запятой только в вашей пасте?   -  person Phil M    schedule 04.05.2017
comment
хаха да ;) спасибо. думаю, компилятору будет сложно построить в этом случае   -  person codeMetis    schedule 04.05.2017


Ответы (1)


Предупреждение кажется неизбежным и связано не столько с моим списком инициализаторов, сколько с qvector. Любой конструктор для проверки Qvector

  if (QTypeInfo<T>::isComplex)

Это простое значение перечисления, есть пара классов без шаблона, шаблона * или шаблона в синтаксисе объявления имени класса, указанного ниже. Хотел бы, чтобы мне это объяснили!

template <typename T>
class QTypeInfo { enumbla;}

template<>
class QTypeInfo<void> { enumbla;}

template <typename T>
class QTypeInfo<T*> { enumbla;}

Таким образом, if ищет значение перечисления для соответствующего класса QTypeInfo, который является константой, так как это перечисление, ура!

Yay неизбежные предупреждения, больше вещей, чтобы подавить!

person codeMetis    schedule 05.05.2017