我担心在内核中我无法访问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);
}
答案 0 :(得分:1)
假设没有拼写错误,应该这样做。完整的定义在标准中给出(实际上是两个;新旧),我完全按照这样做:将正式版本复制到我自己的标题中,然后满足我的特殊要求和/或支持旧的gnu std lib但是编译器groks rvalue references。
为了解决@ T.C。的问题,能够编写我自己的仅移动类型并能够使用它们仍然很有用,例如:从功能返回,即使提供的容器不知道它。 Boost容器类做,你可以覆盖配置告诉Boost你有&amp;&amp;,如果你提供所有std :: move,std :: forward,以及它需要什么。我还使用本机右值引用和Boost移动仿真同时进行混合方法,以便与通常配置的Boost编译的代码兼容。