В N3059 я нашел описание кусочной конструкции пар (и кортежей) (и он находится в новом стандарте).
Но я не вижу, когда я должен его использовать. Я нашел обсуждения об элементах emplace и non-copyable, но когда я попробовал это, я не смог создать случай, когда мне нужно piecewiese_construct
или вы могли бы увидеть преимущество производительности.
Пример. Я думал, что мне нужен класс, который не копируется, но movebale (требуется для пересылки):
struct NoCopy {
NoCopy(int, int) {};
NoCopy(const NoCopy&) = delete; // no copy
NoCopy& operator=(const NoCopy&) = delete; // no assign
NoCopy(NoCopy&&) {}; // please move
NoCopy& operator=(NoCopy&&) {}; // please move-assign
};
Затем я отчасти ожидал, что стандартная пара-конструкция завершится неудачно:
pair<NoCopy,NoCopy> x{ NoCopy{1,2}, NoCopy{2,3} }; // fine!
но это не так. На самом деле, это то, чего я ожидал в любом случае, потому что "перемещение вокруг", а не копирование его повсюду в stdlib, должно быть.
Таким образом, я не вижу причин, почему я должен был это сделать или так:
pair<NoCopy,NoCopy> y(
piecewise_construct,
forward_as_tuple(1,2),
forward_as_tuple(2,3)
); // also fine
- Итак, что такое usecase?
- Как и когда использовать
piecewise_construct
?