std::move 带有内部对象 - 调用不匹配
std::move with inner objects - no match for call
以下代码无法编译。
主要:
#include "preset.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
SomeA a1(4);
WrapA wA1(a1);
WrapA wA2(std::move(wA1)); //fails to compile here
return a.exec();
}
preset.h :
#include <QDebug>
class SomeA
{
public:
SomeA(int l){val = l;}
SomeA(const SomeA& original): val(original.val){qDebug()<<"sA copy;";}
SomeA(SomeA&& original){std::swap(val, original.val); qDebug()<<"sA move;";}
SomeA operator = (const SomeA&);
int val{0};
};
class WrapA
{
public:
WrapA(SomeA obj): aObj(obj){}
WrapA(const WrapA& original): aObj(original.aObj) {qDebug()<<"wA copy";}
WrapA(WrapA&& original) {aObj(std::move(original.aObj)); qDebug()<<"wA move";} //no match for call (SomeA)(std::remove_reference<SomeA&>::type)
SomeA aObj{0};
};
我想 std::move 不会从对右值的引用进行转换。任何想法如何实现如此深入的移动c-tor?我想我错过了什么,但不明白到底是什么
WrapA(WrapA&& original) {aObj(std::move(original.aObj)); qDebug()<<"wA move";}
你打算把它写成
WrapA(WrapA&& original) : aObj(std::move(original.aObj)) {qDebug()<<"wA move";}
另请参阅复制构造函数以供参考。
(应该已经有类似的问题了,但是我没找到。)
以下代码无法编译。 主要:
#include "preset.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
SomeA a1(4);
WrapA wA1(a1);
WrapA wA2(std::move(wA1)); //fails to compile here
return a.exec();
}
preset.h :
#include <QDebug>
class SomeA
{
public:
SomeA(int l){val = l;}
SomeA(const SomeA& original): val(original.val){qDebug()<<"sA copy;";}
SomeA(SomeA&& original){std::swap(val, original.val); qDebug()<<"sA move;";}
SomeA operator = (const SomeA&);
int val{0};
};
class WrapA
{
public:
WrapA(SomeA obj): aObj(obj){}
WrapA(const WrapA& original): aObj(original.aObj) {qDebug()<<"wA copy";}
WrapA(WrapA&& original) {aObj(std::move(original.aObj)); qDebug()<<"wA move";} //no match for call (SomeA)(std::remove_reference<SomeA&>::type)
SomeA aObj{0};
};
我想 std::move 不会从对右值的引用进行转换。任何想法如何实现如此深入的移动c-tor?我想我错过了什么,但不明白到底是什么
WrapA(WrapA&& original) {aObj(std::move(original.aObj)); qDebug()<<"wA move";}
你打算把它写成
WrapA(WrapA&& original) : aObj(std::move(original.aObj)) {qDebug()<<"wA move";}
另请参阅复制构造函数以供参考。
(应该已经有类似的问题了,但是我没找到。)