我需要移植std::移动到我的内核吗
Do I need to port std::move to my kernel?
我担心在内核领域,我将无法访问std::move
、std::forward
、std::initializer_list
等功能。虽然这些功能中的一些是内置在语言中的,但它们仍然需要适当的头和库实现。以下内容是否足以利用move语义,或者我是否需要深入九码并移植一个C++库?
template <typename T>
typename remove_reference<T>::type&& move(T&& arg)
{
return static_cast<typename remove_reference<T>::type&&>(arg);
}
如果没有错别字,就应该这样做。标准中给出了完整的定义(实际上有两个:旧的和新的),我已经做到了:只需将官方版本复制到我自己的头中,然后解决我的特殊需求和/或支持旧的gnu-std-lib,但编译器会查找rvalue引用。
为了解决@T.C.的问题,能够编写自己的仅移动类型并能够使用它们(例如从函数返回)仍然很有用,即使提供的容器不知道这一点&,如果你提供了所有的std::move,std::forward,以及它需要的东西。我还获得了一种混合方法,它使用本机右值引用和Boost移动模拟同时工作,以与使用Boost编译的代码兼容。
相关文章:
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- MSVC将仅移动结构参数解释为指针
- CUDA内核和数学函数的显式命名空间
- 自定义先决条件对移动分配运算符有效吗
- 返回值优化:显式移动还是隐式
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 可以使用移动语义更改或改进此C++代码吗?
- 使lambda不可复制/不可移动
- c++在使用指针时移动语义
- 将QGraphicsItem的移动区域限制在多边形区域内
- SendInput()鼠标移动计算
- 特定的OpenCL内核在移动和PC上的性能不同
- 我需要移植std::移动到我的内核吗