LINUX.ORG.RU

[Qt] Как написать для QMap значение по-умолчанию в прототипе функции?

 


0

2

Здравствуйте!


Есть функция, которой может последним параметром передаваться QMap. А может и не передаваться.

Вопрос - как в прототипе такой функции прописать значение по-умолчанию для QMap?

Пробовал так:

void function( QString name, QMap<QString, QStringList> record=QMap<QString, QStringList>() )
{
 ...
}

Компиляция не идет, выдает ошибку:

src/recordtabledata.h:53: error: expected ‘,’ or ‘...’ before ‘>’ token
src/recordtabledata.h:53: error: wrong number of template arguments (1, should be 2)

Как сделать правильно?


Ответ на: комментарий от shty

> как только Вы осознаете тот факт что в первоначальной задаче ничего про потоки сказано не было Вам станет сразу легче

«Сказано не было» означает, что потоки есть либо могут появиться в будущем. =)

rival ★★
()
Ответ на: комментарий от rival

> как только Вы осознаете тот факт что в первоначальной задаче ничего про потоки сказано не было Вам станет сразу легче

«Сказано не было» означает, что потоки есть либо могут появиться в будущем. =)

предлагаю тогда сразу писать через #ifdef ещё и на голом си, чтобы код запускался и на контроллерах ICPCON, не ну а вдруг понадобится

shty ★★★★★
()
Ответ на: комментарий от shty

найдёте хоть один?

Согласен, не найду. Почему-то мне думалось, что там был вариант с дефолтным значением указателя NULL.

ога, ога, какому там программисту и компилятор работать мешает?

Знаю только про танцоров с яйцами, про программистов не слышал.
Ведь изначально была вполне валидная конструкция с точки зрения языка, которую вполне кушает другая версия компилятора. Это разве не говорит о том, что у ТС глючная версия GCC?

поясняю: одна из проблем состоит в ожиданиях человека пишущего код, если говорить точнее то в непрогнозируемом поведении функции, то есть человек совсем не ожидает, что если не указывается второй параметр то при вызове функции там где-то на заднем плане вызывается «всего лишь» 3 конструктора

Согласен, не очень приятно.

если этим начать злоупотреблять то потом замучишься отлаживать такой код (автоматическое тестирование пока опустим)

Возможно, но пока не испытал на своей шкуре.

предлагаю тогда сразу писать через #ifdef ещё и на голом си, чтобы код запускался и на контроллерах ICPCON, не ну а вдруг понадобится

Reductio ad absurdum

rival ★★
()
Ответ на: комментарий от rival

Ведь изначально была вполне валидная конструкция с точки зрения языка

стандарт С++ - это смешной довольно таки документ в котором часто встречаются «поведение не определено» и «зависит от реализации»

Ведь изначально была вполне валидная конструкция с точки зрения языка, которую вполне кушает другая версия компилятора. Это разве не говорит о том, что у ТС глючная версия GCC?

вот именно поэтому лучше не использовать странные вещи, представьте что послезавтра этот проект придётся собирать ещё и MSVC, сколько там веселья вылезет :)

любая программа сложнее «hello, world» по определению содержит баги и может быть рассмотрена как глючная :) что уж тут говорить о таких масштабных проектах как GCC

shty ★★★★★
()
Ответ на: комментарий от shty

1) при передаче QString по значению ничего не копируется

это как, не поясните?

документацию по QString хотя бы прочтите, ключевые слова - Implicit Sharing

wmd
()
Ответ на: комментарий от wmd

> документацию по QString хотя бы прочтите, ключевые слова - Implicit Sharing

Да, в Qt неявная работа с указателями, когда используется указатель на объект в случае, если код не модифицирует объект - это то, за что разработчиков Qt надо в жопу расцеловать. GTK и иже с ними застряли в этом смысле далеко позади прогресса.

xintrea
() автор топика
Ответ на: комментарий от wmd

документацию по QString хотя бы прочтите, ключевые слова - Implicit Sharing

теперь я отчётливо понимаю почему от изучавших Qt плюются те кто программирует на C++

shty ★★★★★
()
Ответ на: комментарий от wmd

и почему же?

слишком много подстраховок, голый C++ такого не прощает

shty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.