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

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

概述我只能访问C 03,而且我经常想要将一个向量移动到一个函数中,就像你在C 11中那样.这个问题如何做到不要过多地混淆代码的用户.所以我的问题是程序员在C 11之前是如何做到的. 我知道可以使用交换功能“移动”向量.所以这就是我想出的: class Foo{public: Foo(std::vector<int>& vec) { using std::swap; 我只能访问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 03通过构造函数将向量移动到类成员中(移动语义)全部内容,希望文章能够帮你解决C 03通过构造函数将向量移动到类成员中(移动语义)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1242227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存