我需要将std :: move移植到我的内核吗?

Rig*_*gby 14 c++ kernel libstdc++ c++11

我担心在内核土地,我将无法访问之类的东西std::move,std::forward,std::initializer_list,等.虽然这些功能是内置到语言,他们仍然需要相应的头文件和库实现.以下是否足以利用移动语义,或者我是否需要完整的9码并移植C++库?

template <typename T>
typename remove_reference<T>::type&& move(T&& arg)
{
  return static_cast<typename remove_reference<T>::type&&>(arg);
}
Run Code Online (Sandbox Code Playgroud)

JDł*_*osz 1

假设没有错别字,应该就可以了。标准中给出了完整的定义(实际上有两个;旧的和新的),我已经这样做了: 只需将官方版本复制到我自己的标头中,然后解决我的特殊要求和/或支持旧的 gnu std lib,但是编译器理解右值引用。

为了解决@TC 的担忧,能够编写我自己的仅移动类型并能够使用它们(例如从函数返回)仍然很有用,即使提供的容器不知道这一点。Boost 容器类可以做到这一点,并且您可以覆盖配置来告诉 Boost 您有 &&(如果您提供了所有 std::move、std::forward 及其所需的内容)。我还获得了一种混合方法,使用本机右值引用和同时工作的 Boost 移动仿真,以与按正常配置使用 Boost 编译的代码兼容。