Russian Qt Forum
Ноябрь 22, 2024, 12:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Тип аргумета  (Прочитано 4466 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 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 параметра объединить. Но как это сделать компактно (ну может в стиле злосчастного дуста) ?

Спасибо
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Апрель 11, 2018, 16:01 »

2) std::tuple<bool /*mutable*/, QString /*name*/>. Ну или std::pair или struct
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #2 : Апрель 11, 2018, 16:05 »

1. explicit CData(double)? Или перенести data в конец списка параметров.
2. Если не охота создавать отдельную структуру для этого, то может std::pair<QString, bool> подойдет?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 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);
Нужно короткое имя - какое? (затрудняюсь придумать)
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #4 : Апрель 12, 2018, 08:35 »

BuildNode(desc_REAL, {name, false}, 1.0);
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Апрель 12, 2018, 10:31 »

BuildNode(desc_REAL, {name, false}, 1.0);
Это наверное с туплом. Во, и так можно..

Удовлетворился парой
Код
C++ (Qt)
typedef QPair<QString, bool> QStrBool;
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 23.