gpt4 book ai didi

C++ - 使用默认模板作为特化的基础

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:51 26 4
gpt4 key购买 nike

我想写一个数学 vector 模板。我有一个接受类型和大小作为模板参数的类,有很多数学运算方法。现在我想编写专门化,其中 Vector<3> 例如将 x、y、z 作为分别引用数据 [0..3] 的成员。

问题是我不知道如何创建一个从默认模板继承所有内容的特化,而不创建基类或将所有内容都写两次。

执行此操作最有效的方法是什么?

template<class Type, size_t Size>
class Vector {
// stuff
};

template<class T>
class Vector<3,T>: public Vector {
public:
T &x, &y, &z;
Vector(): Vector<>(), x(data[0]), y(data[1]), z(data[2]){}
// and so on
};

最佳答案

您应该能够以某种方式从默认实现派生,但您正在专门化一个实例,那怎么办?它应该是您可以从中派生的非专业版本。所以这很简单:

// Add one extra argument to keep non-specialized version!
template<class Type, size_t Size, bool Temp = true>
class Vector {
// stuff
};
// And now our specialized version derive from non-specialized version!
template<class T>
class Vector<T, 3, true>: public Vector<T, 3, false> {
public:
T &x, &y, &z;
Vector(): Vector<>(), x(data[0]), y(data[1]), z(data[2]){}
// and so on
};

关于C++ - 使用默认模板作为特化的基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12923945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com