c – 在没有移动ctor的情况下返回不可复制对象的解决方法
发布时间:2020-12-16 06:52:39 所属栏目:百科 来源:网络整理
导读:在我的API中,我有一个返回std :: istringstream的函数. std::istringstream class是不可复制的,但支持在符合标准的编译器上移动,返回本地std :: istringstream没有问题. 但是,在gcc 4.9上,移动std :: istringstream有no support. 是否有一些解决方法,我可以
在我的API中,我有一个返回std :: istringstream的函数.
std::istringstream class是不可复制的,但支持在符合标准的编译器上移动,返回本地std :: istringstream没有问题.
但是,在gcc 4.9上,移动std :: istringstream有no support. 解决方法建议here使用unique_ptr< std :: istringstream>将改变API的语义. 解决方法
如果你不能移动std :: istringstream,那就没什么办法了.
如果对象不可复制且不可移动,则无法按值返回. 在meatime中,您可以返回unique_ptr.如果你真的渴望按值返回,你可以返回一个包含std :: unique_ptr< std :: istringstream>的可移动包装器.并提供与istringstream相同的接口.但是,这也会影响返回类型. 通过右值参考返回可能很诱人.这是你可以做的: struct MyApiClass { std::istringstream&& get_stream() { return std::move(*_stream); } private: std::unique_ptr<std::istringstream> _stream; }; 然后,使用旧的编译器,您可以像这样使用它: std::istringstream&& stream = myApiClass.get_stream(); // use stream as long as myApiClass exists 使用新编译器的人将能够像这样使用它: std::istringstream stream = myApiClass.get_stream(); // use stream normally 这是api受影响较小的方式.除此之外,我不知道任何解决方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |