Russian Qt Forum

Программирование => С/C++ => Тема начата: Igors от Апрель 11, 2018, 15:40



Название: Тип аргумета
Отправлено: Igors от Апрель 11, 2018, 15:40
Добрый день

Вот есть такой вызов
Код
C++ (Qt)
int BuildNode( const CDescriptor & desc, const QString & name, bool nameMutable,
                    const CData & data = CData(), int prevNodeID = 0, int parentNodeID = 0 );
С хорошей кратностью вызова. Возникают 2 мелкие проблемки

1) CData имеет разнообразные конструкторы, в том числе и CData(double), поэтому хорошие шансы насвистеть, напр
Код
C++ (Qt)
BuilfNode(desc, name, true, prevID, parentID); // пропустил data, а компилятор сожрал без звука  :'(

2) nameMutable - целиком посвящено name, хорошо бы эти 2 параметра объединить. Но как это сделать компактно (ну может в стиле злосчастного дуста) ?

Спасибо


Название: Re: Тип аргумета
Отправлено: Авварон от Апрель 11, 2018, 16:01
2) std::tuple<bool /*mutable*/, QString /*name*/>. Ну или std::pair или struct


Название: Re: Тип аргумета
Отправлено: Swa от Апрель 11, 2018, 16:05
1. explicit CData(double)? Или перенести data в конец списка параметров.
2. Если не охота создавать отдельную структуру для этого, то может std::pair<QString, bool> подойдет?


Название: Re: Тип аргумета
Отправлено: Igors от Апрель 12, 2018, 08:05
С туплом вообще не понял

1. explicit CData(double)?
Ой нет, там тысячи др вызовов где нужен implicit. Да и в данном он вполне "в масть", напр
Код
C++ (Qt)
BuildNode(desc_REAL, name, false, 1.0);
Очень популярный вызов, и оборачивать в CData не тянет (реальное имя там подлиннее). А перенос в конец - не вижу чем лучше

2. Если не охота создавать отдельную структуру для этого, то может std::pair<QString, bool> подойдет?
Да, что-то "почти макруха", но как оформить? Не писать же всякий раз
Код
C++ (Qt)
BuildNode(desc_REAL, std::pair<QString, bool>(name, false), 1.0);
Нужно короткое имя - какое? (затрудняюсь придумать)


Название: Re: Тип аргумета
Отправлено: qate от Апрель 12, 2018, 08:35
BuildNode(desc_REAL, {name, false}, 1.0);


Название: Re: Тип аргумета
Отправлено: Igors от Апрель 12, 2018, 10:31
BuildNode(desc_REAL, {name, false}, 1.0);
Это наверное с туплом. Во, и так можно..

Удовлетворился парой
Код
C++ (Qt)
typedef QPair<QString, bool> QStrBool;