Информация об изменениях

Сообщение Re[2]: Эмулирую tuples такие, какими они сделаны в python, м от 26.12.2019 15:27

Изменено 26.12.2019 15:29 rg45

Re[2]: Эмулирую tuples такие, какими они сделаны в python, матлаб и
Здравствуйте, sergii.p, Вы писали:

SP>а почему нельзя сделать "exchange values python style" так?

SP>
SP>    int i0 = 1;
SP>    int i1 = 2;
SP>    std::tie(i0, i1) = std::make_tuple(i1, i0);
SP>


SP>и что такое tuple в Matlab, чем он отличается от реализации в С++? Трудно читать код (особенно шаблонный), когда не понимаешь какую задачу он решает


Как я понял, главная его фишка как раз в том, что нет разделения на tuple и tie. И выражение to_tuplei0, i1) = to_tuple(i1, i0), действительно выполняет обмен, подобно swap. Чтобы этого добиться, ему пришлось запихнуть в свой tuple одновременно и ссылку, и значение. Конструкторы сделал закрытыми, оставив только возможность конструирования через фабричные функции. Расплатой за это стало то, что теперь нельзя сделать простейшую инициализацию: auto t = to_tuple(1, 2); Потому что внутри объекта тут же возникают протухшие ссылки. Это, кстати, не такое уж редкое явление среди разработчиков, когда человек сосредотачивается на какой-нибудь фишечке и приносит ей в жертву остальной функционал.
Re[2]: Эмулирую tuples такие, какими они сделаны в python, м
Здравствуйте, sergii.p, Вы писали:

SP>а почему нельзя сделать "exchange values python style" так?

SP>
SP>    int i0 = 1;
SP>    int i1 = 2;
SP>    std::tie(i0, i1) = std::make_tuple(i1, i0);
SP>


SP>и что такое tuple в Matlab, чем он отличается от реализации в С++? Трудно читать код (особенно шаблонный), когда не понимаешь какую задачу он решает


Как я понял, главная его фишка как раз в том, что нет разделения на tuple и tie. И выражение to_tuple(i0, i1) = to_tuple(i1, i0), действительно выполняет обмен, подобно swap. Чтобы этого добиться, ему пришлось запихнуть в свой tuple одновременно и ссылку, и значение. Конструкторы сделал закрытыми, оставив только возможность конструирования через фабричные функции. Расплатой за это стало то, что теперь нельзя сделать простейшую инициализацию: auto t = to_tuple(1, 2); Потому что внутри объекта тут же возникают протухшие ссылки. Это, кстати, не такое уж редкое явление среди разработчиков, когда человек сосредотачивается на какой-нибудь фишечке и приносит ей в жертву остальной функционал.