Здравствуйте, Кодт, Вы писали:
К>А в случае с кортежом произвольной размерности — фиг. К>Компилятор позволяет или сразу подставить список аргументов-скаляров в конструктор (тогда можно создать некопируемый-неперемещаемый кортеж), или должен прибегнуть к рекурсии. К>А для рекурсии нужно копирование-перемещение, либо особая макросная магия — как в старом добром C++98.
О чём речь?
Создать tuple с non-movable & non-copyable полями и конструировать их piecewise из набора кортежей аргументов — принципиально возможно.
Вот черновик:
тут, если расскоментить два фрагмента в main() — код перестанет компилиться. ошибка в том, что:
error: use of deleted function 'type::type(const type&)'
copy и move конструкторы для type на самом деле не нужны.
дело в том, что std::pair(std::piecewise_construct, ...) умеет что нужно.
пример конструктора std::pair()тут. но сам не могу понять, что нужно сделать.
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
<>
В случае с парой всё просто: размерность кортежа заранее известна, и транспонировать список пар аргументов в пару списков не составит труда.
Поэтому сразу можно сконструировать пару некопируемых-неперемещаемых типов, которая сама становится некопируемой-неперемещаемой.
А в случае с кортежом произвольной размерности — фиг.
Компилятор позволяет или сразу подставить список аргументов-скаляров в конструктор (тогда можно создать некопируемый-неперемещаемый кортеж), или должен прибегнуть к рекурсии.
А для рекурсии нужно копирование-перемещение, либо особая макросная магия — как в старом добром C++98.
Здравствуйте, jazzer, Вы писали:
J>Если не секрет, в чем проблема сделать тип перемещаемым?
то что я пишу — библиотечный код.
юзер будет юзать этот код, и подставлять свои type`ы. таким образом, мне, из-за кривой реализации, придется заставить юзера писать ненужный для него move-конструктор.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)