C++ 在基类之间移动语义
我们有以下课程:C++ 在基类之间移动语义,c++,c++11,move-semantics,C++,C++11,Move Semantics,我们有以下课程: struct Intermediate : public std::array<double,3> {}; struct Vector3 : public Intermediate { // ........more ctors......... // Modified move constructor (base class) Vector3(std::array<double,3> &&v) { ???????
struct Intermediate : public std::array<double,3> {};
struct Vector3 : public Intermediate
{
// ........more ctors.........
// Modified move constructor (base class)
Vector3(std::array<double,3> &&v) { ??????? }
// ........more functionality...........
};
struct Intermediate:public std::array{};
结构向量3:公共中间层
{
//……更多的执行官。。。。。。。。。
//修改的移动构造函数(基类)
Vector3(std::array&&v){
//更多功能。。。。。。。。。。。
};
“修改的”移动构造函数的行为是否与原始移动构造函数类似
如何实现构造函数?
除了std::array::swap,还有其他方法吗?您可以这样做:
Vector3(std::array<double,3> &&v)
{ static_cast<std::array<double,3>&>(*this) = std::move(v); }
Vector3(std::array&&v)
{static_cast(*this)=std::move(v);}
此移动将v
分配给This
但这一举动似乎毫无意义。当您移动
一个双精度数组时,它仍将进行复制double
没有移动语义,只有复制语义,并且array
直接包含数组,因此无法将其移动到另一个对象。当move
一个double
数组时,它仍将执行复制操作double
没有移动语义,只有复制语义我知道这不是您所要求的,但不会从std::array
继承。改为尝试子分类。另外,如果您将std::array子类化,则(move)构造函数将变得微不足道。您不应该继承非为继承而设计的类型(包括std::array
和大多数其他容器)。除此之外,当数据保存在适当的位置时,无法从std::array
中移动任何内容。@utnapistim猜猜子类化和继承在common@utnapistim:您对“继承自”和“子类”有什么区别?@Xeo不需要std::move(v)
?;该死,这是一个快速的答案编辑:)std::array
不是Vector3的直接基类,那你要怎么做?我这样写答案是有原因的(显然原因是我确实读过这个问题;)海海,隧道视野战胜了我。:)对不起。