C 03通过构造函数将向量移动到类成员中(移动语义)

我只能访问C 03,而且我经常想要将一个向量移动到一个函数中,就像你在C 11中那样.这个问题如何做到不要过多地混淆代码用户.所以我的问题是程序员在C 11之前是如何做到的.

我知道可以使用交换功能“移动”向量.所以这就是我想出的:

class Foo
{
public:
    Foo(std::vector<int>& vec)
    {
        using std::swap;
        swap(vec,m_vec);   // "move" vec into member vector
    }

private:
    std::vector<int> m_vec;
};

// usage:
std::vector<int> v(100,1337);
Foo foo(v);
// v.empty() == true

这种方法的问题在于,用户不明白他们的向量将被移动到类Foo中.有这种问题的最佳实践解决方案吗?提前致谢!

解决方法

您可以定义包装引用的类型和包装它的函数,以提供类似于在调用站点移动语义的类型.有点像
template <typename T> struct move_ref {
    explicit move_ref(T & ref) : ref(ref) {}
    T & ref;
};

template <typename T> move_ref<T> move(T & t) {return move_ref<T>(t);}

Foo(move_ref< std::vector<int> > vec)
{
    using std::swap;
    swap(vec.ref,m_vec);   // "move" vec into member vector
}

Foo foo(move(v));

或者,Boost有一个library允许移动语义而没有C 11.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...