p0083中“非常有效的元素工厂”的目的

时间:2017-03-29 18:40:34

标签: c++ c++17

Proposal 显示奇怪的地图API使用:

  

这使得非常高效的工厂成为可能   元素

auto new_record()
{
  table_type table;
  table.emplace(...); // Create a record with some parameters.
  return table.extract(table.begin());
}
table.insert(new_record());

假设记录是可移动的(因此从函数返回它并不是非常昂贵)这个代码是否有意义?

1 个答案:

答案 0 :(得分:2)

这只是一个展示如何创建元素并在不复制(或移动)的情况下返回元素的示例,它并不意味着生产代码可以做一些真实的事情。

如果您看不到示例的要点,请假设table不是局部变量,而是某些可能已包含某些值的全局变量:

table_type table;
auto insert_record_and_take_first(const Foo& foo, const Bar& bar, const Baz& baz)
{

  table.emplace(foo, bar, baz); // Create a record with some parameters.
  return table.extract(table.begin()); // Remove first 
}
table.insert(insert_record_and_take_first());

如果记录类型不可移动,则无法进行此操作。即使它是可移动的,这样做也可能更有效率。

  

假设记录是可移动的(因此从函数返回它并不是非常昂贵)这个代码是否有意义?

pair<const X, Y>可移动吗?你如何从const键移动?

当你只能获得const迭代器到元素时,如何从std::set元素移动?