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

时间:2014-09-12 22:12:57

标签: c++ c++11 kernel libstdc++

我担心在内核中我无法访问std::movestd::forwardstd::initializer_list等内容。虽然其中一些功能内置于语言,他们仍然需要适当的标题和库实现。以下是否足以利用移动语义,或者我是否需要完整的9码并移植C ++库?

template <typename T>
typename remove_reference<T>::type&& move(T&& arg)
{
  return static_cast<typename remove_reference<T>::type&&>(arg);
}

1 个答案:

答案 0 :(得分:1)

假设没有拼写错误,应该这样做。完整的定义在标准中给出(实际上是两个;新旧),我完全按照这样做:将正式版本复制到我自己的标题中,然后满足我的特殊要求和/或支持旧的gnu std lib但是编译器groks rvalue references。

为了解决@ T.C。的问题,能够编写我自己的仅移动类型并能够使用它们仍然很有用,例如:从功能返回,即使提供的容器不知道它。 Boost容器类,你可以覆盖配置告诉Boost你有&amp;&amp;,如果你提供所有std :: move,std :: forward,以及它需要什么。我还使用本机右值引用和Boost移动仿真同时进行混合方法,以便与通常配置的Boost编译的代码兼容。