c++ 如何进行保存成员的正确模板专门化

2skhul33  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(137)

我有一个关于特化的问题。我想用特定类型模板特化来做一个结构。但是,问题是当我试图特化这个结构时,结构成员没有被声明。
我有一个结构体

template<typename T>
struct v4
{
    union
    {
        struct
        {
            T x, y, z, w;
        };
        struct
        {
            T r, g, b, a;
        };
        T E[4];
    };

    v4() = default;

    // A lot more members, etc
    // ....
}

我想专门化这个结构或者用类似这样的东西来得到我需要的行为:

template<>
struct v4 : v4<u16>
{
    vech4() = default;
    vech4(const v4<r32>& V)
    {
        x = EncodeHalf(V.x);
        y = EncodeHalf(V.y);
        z = EncodeHalf(V.z);
        w = EncodeHalf(V.w);
    }
};

如何正确地指定模板专门化并获得所需的行为?

u91tlkcl

u91tlkcl1#

专门化模板时,您将用新模板替换常规模板定义。看起来您要添加而不是替换。如果是这样,您应该继承而不是专门化。
你应该编个新名字:

struct v4_u16 : v4<u16>
{
    v4_u16() = default;
    v4_u16(const v4<r32>& V)
    {
        x = EncodeHalf(V.x);
        y = EncodeHalf(V.y);
        z = EncodeHalf(V.z);
        w = EncodeHalf(V.w);
    }
};

新的struct不再是一个模板,但是它继承了一个模板示例化和其中的所有内容。

相关问题