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的直接基类,那你要怎么做?我这样写答案是有原因的(显然原因是我确实读过这个问题;)海海,隧道视野战胜了我。:)对不起。