我有以下非类型模板:
template<size_t MAX_SIZE>
struct Path{
struct Point{
float x;
float y;
}
};
Point segment[MAX_SIZE];
};
如果我现在声明两个不同的路径,我不能将不同段的元素相互分配,因为结构可能具有相同的结构,但类型不同:
Path<10> path_a ;
Path<30> path_b ;
path_a.segment[0].x = 1;
path_a.segment[0].y = 2;
path_b.segment[0] = path_a.segment[0]; // <- error C2679 in Visual Studio)
当然,如果我将点和路径的定义分开,则分配将起作用:
struct Point{
float x;
float y;
};
template<size_t MAX_SIZE>
struct Path{
Point segment[MAX_SIZE];
};
但这不是我想要的(这只是一个 MWE),所以我想知道如何重载复制赋值运算符以使其工作。我尝试了许多变体,例如:
template<size_t MAX_SIZE>
struct Path{
struct Point{
float x;
float y;
template<size_t OTHER_SIZE>
Point & operator = (const typename Path<OTHER_SIZE>::Point & that)
{
x = that.x;
y = that.y;
return *this;
}
};
Point segment[MAX_SIZE];
};
但我总是遇到同样的错误。所以我的问题是:是否可以重载 = 以允许在不改变结构布局的情况下分配以下形式?
path_b.segment[0] = path_a.segment[0];