Mikhail
Ivan
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
Как раз, в этом фича
Ivan
А в чем вольность, ты указал поле и значение которое нужно присвоить
Ivan
Что может пойти не так?
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
Может компилятор сам переставит в соответствии с порядком объявления полей
Ivan
Anatoly
пока считается ошибкой http://en.cppreference.com/w/cpp/language/aggregate_initialization
Ivan
Ivan
А клиент просто хочет присвоить полю значение
Anatoly
В твоем случае рулит паттерн builder
Ivan
А это вместо паттерна строитель и есть
Anatoly
я понимаю твою задумку, но указал на то что ты закладываешься на вольность компилятора
Ivan
Я сейчас попробую сломать
Ioann_
Ну кстати не забывайте, что интегральные и арифм. типы можно инитить прямо в структуре - константами компиляции
Anatoly
Крылатый
Ivan
Anatoly
:)
Ioann_
Я лично, забываю
Ivan
Когда в срр не видишь чем инициализированы поля
Ivan
Приходится лезть в hpp
Danil
.hpp
Ivan
Код разносится уже, header стал не только объявлением
Danil
Го
#holywar
Ivan
Ещё, блин, и в .h надо смотреть
Danil
.hxx!
Ivan
Ivan
Компилятор так сделать не даёт. Так что всё ок.
Anatoly
поскольку m2 еще не инициализирован
Anatoly
Это ты к чему?
Ivan
Ivan
В чем беда если порядок инициализации не совпадает с объявлением. В том, что ты можешь использовать непроинициализированные поля. А здесь такого не будет
Anatoly
В том, что стандарт гарантирует порядок конструирования членов класса и порядок вызова из деструкторов.
Ivan
В порядке объявления , поэтому в списке инициализации можно накосячить
Ivan
А здесь нельзя накосячить
StructName{.m1 = .m2, m2 = "ABC" };
Ivan
Это не компилируется
Anatoly
Я чувствую, что ты мне что-то пытаешься доказать, но я не пойму что.
Mikhail
https://wandbox.org/permlink/XIAr3xemq4H4XD1E
пойдет??
Ivan
Ivan
Я до этого просто перегрузил operator string() - то же самое)
Mikhail
Anatoly
Тем не менее, при выводе в поток он этот оператор std::string не найдет
Mikhail
если често ребят это все баловство
Mikhail
пиши ясные, понятные контструкции
Mikhail
и все будет хорошо
Mikhail
а не магию сторить
Ivan
Вот и всё
Ivan
Ivan
Но мне говорили, что там такое есть. Как раз сегодня)
Ivan
Да,
Ivan
И это почти нормально выглядит
Mikhail
Ни разу
вообщем порядок аргументов это очень важная вещь. там все хитро и не просто.
посмотри если не лень как в шарпах это решается.
я на работе, мне долго писать. так что сорь
Ivan
Если через структуру делать функции
Ivan
Оверхед
Mikhail
согласен полностью
Anatoly
почему не будет? в С++20 намечены
Anatoly
designated initialization называется
Ivan
Их нету, но можно выкрутится через именнованые поля структур
Anatoly
google в помощь
Anatoly
да
Anatoly
но порядок там совсем не произвольный