小编mag*_*ter的帖子

重载非复制模板结构的成员结构的复制赋值运算符

我有以下非类型模板:

template<size_t MAX_SIZE>
struct Path{
    struct Point{
        float x;
        float y;
       }
    };
    Point segment[MAX_SIZE];
};
Run Code Online (Sandbox Code Playgroud)

如果我现在声明两个不同的路径,我不能将不同段的元素相互分配,因为结构可能具有相同的结构,但是具有不同的类型:

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)
Run Code Online (Sandbox Code Playgroud)

当然,如果我将Point和Path的定义分开,那么赋值将起作用:

struct Point{
        float x;
        float y;
       };

template<size_t MAX_SIZE>
struct Path{
    Point segment[MAX_SIZE];
};
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的(这只是一个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; …
Run Code Online (Sandbox Code Playgroud)

c++ templates struct copy-assignment non-type

9
推荐指数
1
解决办法
483
查看次数

标签 统计

c++ ×1

copy-assignment ×1

non-type ×1

struct ×1

templates ×1