В N3059 Я нашел описание кусочной конструкции пар (и кортежей) (и это в новом стандарте).
Но я не вижу, когда мне следует это использовать. Я нашел обсуждения о emplace и не копируемых объектах, но когда я попробовал это, я не смог создать случай, когда мне понадобится 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
?