缺少一元std::copy的最佳实现
Best implementation of the missing unary std::copy
c++ 11引入了语义来避免不必要的复制对象,而std::move
则在发生复制时应用这些语义。但是,现在也有一些情况需要一个副本,但不是默认的。
reverse
的这个朴素实现。因为基于范围的for
使用完美转发,所以对循环内容器的修改相当于损坏。
auto out_iter = container.rbegin();
for ( auto value : container ) {
* out_iter ++ = value;
}
目标是使用
来解决这个问题。for ( auto value : copy( container ) ) {
看起来很简单…接受任何参数,获取底层类型并返回临时副本。
您正在计算的返回类型通常称为typename std::decay<T>::type
。除此之外,在正文中使用std::forward
可以获得完美转发的全部好处:
template<typename T>
typename std::decay<T>::type
val(T&& t)
{ return std::forward<T>(t); }
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 派生类销毁的最佳实践是什么
- std::filesystem::copy throws filesystem_error
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 检测win32服务创建和删除的最佳方法
- 在reactor中存储eventHandlers的最佳方式是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 使用 .Copy 执行复制构造函数的最佳方法
- 缺少一元std::copy的最佳实现