我有以下非类型模板:重载拷贝赋值运算符用于非类型模板结构的成员结构
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];
只是为了确保你是不是X-Y'ing这一点,你可以详细说明*为什么*每个路径的点必须是一个独特的类型,但仍然可以相互分配? –
@MarkB,这是无关紧要的问题。这个问题本身就是有效的。指定不同外层模板的内部结构本身就是一个有效的东西。 – SergeyA
@MarkB:主要原因是我有点固执,真的很想知道是否有办法让它工作。此外,对于此处介绍的简单示例,可能有一种解决方法,但不是一般情况下的解决方案,因为它可能需要对现有代码库进行多处更改。 – magnetometer