Tom
Лопатой по зубам за такую современность
Чего это вдруг? Почитай вот http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html
Ivan
А нарисуй, как ты хочешь, чтобы выглядел код?
Мм, например без вызова ClassName::call({...}), а напрямую ClassName({...})
Ivan
Я хочу чтобы порядок аргументов был не важен
Anatoly
при использовании designated initialization list порядок важен
Anatoly
и должен совпадать с порядком определения членов
Anatoly
так что тебя это не спасет
Ivan
Я же приводил пример где порядок не важен
Ivan
Вот, например, https://wandbox.org/permlink/qJpx1vPVjR3KN0yf
Anatoly
ну, по идее это нарушает стандарт A a{.y = 2, .x = 1}; // error; designator order does not match declaration order
Anatoly
хоть еще не принятый
Ivan
Как раз, в этом фича
Nikita
Я хочу чтобы порядок аргументов был не важен
Можешь шаблонизированно сортировать списки типов, если так хочется
Anatoly
Как раз, в этом фича
В этом фича, я понимаю, но это вольность компилятора
Ivan
А в чем вольность, ты указал поле и значение которое нужно присвоить
Ivan
Что может пойти не так?
Anatoly
Что может пойти не так?
тот же самый смысл, что и порядок инициализации членов в списке инициализации
Ivan
Аа
Anatoly
по стандарту struct foo { int a; int b; foo() : a(10), b(10) {} }; но не struct foo { int a; int b; foo() : b(10), a(10) {} };
Ivan
Может компилятор сам переставит в соответствии с порядком объявления полей
Anatoly
пока считается ошибкой http://en.cppreference.com/w/cpp/language/aggregate_initialization
Ivan
по стандарту struct foo { int a; int b; foo() : a(10), b(10) {} }; но не struct foo { int a; int b; foo() : b(10), a(10) {} };
Но ты эту шляпу пишешь не в клиентском коде, ну ошибся с порядком, сам виноват
Ivan
А клиент просто хочет присвоить полю значение
Anatoly
В твоем случае рулит паттерн builder
Ivan
А это вместо паттерна строитель и есть
Anatoly
я понимаю твою задумку, но указал на то что ты закладываешься на вольность компилятора
Ivan
Я сейчас попробую сломать
Ioann_
Ну кстати не забывайте, что интегральные и арифм. типы можно инитить прямо в структуре - константами компиляции
Крылатый
Anatoly
:)
Ioann_
Я лично, забываю
Ivan
Когда в срр не видишь чем инициализированы поля
Ivan
Приходится лезть в hpp
Danil
.hpp
Ivan
Код разносится уже, header стал не только объявлением
Danil
Го #holywar
Ivan
Ещё, блин, и в .h надо смотреть
Danil
.hxx!
Ivan
Компилятор так сделать не даёт. Так что всё ок.
Anatoly
поскольку m2 еще не инициализирован
Anatoly
Это ты к чему?
Ivan
Это ты к чему?
К тому, что нельзя упороть инициализацию
Ivan
В чем беда если порядок инициализации не совпадает с объявлением. В том, что ты можешь использовать непроинициализированные поля. А здесь такого не будет
Anatoly
В том, что стандарт гарантирует порядок конструирования членов класса и порядок вызова из деструкторов.
Ivan
В порядке объявления , поэтому в списке инициализации можно накосячить
Ivan
А здесь нельзя накосячить StructName{.m1 = .m2, m2 = "ABC" };
Ivan
Это не компилируется
Anatoly
Я чувствую, что ты мне что-то пытаешься доказать, но я не пойму что.
Mikhail
https://wandbox.org/permlink/XIAr3xemq4H4XD1E пойдет??
Ivan
Я до этого просто перегрузил operator string() - то же самое)
Mikhail
Anatoly
Тем не менее, при выводе в поток он этот оператор std::string не найдет
Mikhail
если често ребят это все баловство
Mikhail
пиши ясные, понятные контструкции
Mikhail
и все будет хорошо
Mikhail
а не магию сторить
Ivan
пиши ясные, понятные контструкции
Хочется, не магию. Хочется чтобы было пофиг на порядок аргументов
Ivan
Вот и всё
Mikhail
Вот и всё
на шарпах кодил?
Ivan
Но мне говорили, что там такое есть. Как раз сегодня)
Ivan
Да,
Ivan
И это почти нормально выглядит
Mikhail
Ни разу
вообщем порядок аргументов это очень важная вещь. там все хитро и не просто. посмотри если не лень как в шарпах это решается. я на работе, мне долго писать. так что сорь
Ivan
Если через структуру делать функции
Ivan
Оверхед
Mikhail
согласен полностью
Anatoly
почему не будет? в С++20 намечены
Anatoly
designated initialization называется
Ivan
Их нету, но можно выкрутится через именнованые поля структур
Anatoly
google в помощь
Anatoly
да
Anatoly
но порядок там совсем не произвольный