我有一个类Vec2
和一个类Vec3
,并且我希望它的行为类似于glm vec2
和vec3
。但是我想要像dot
,cross
这样的附加方法,它们不是glm中的成员函数(它是单独的函数)。如何创建我的类Vec2
和Vec3
,使它们为glm vec2
和vec3
,但具有附加方法?如果我只有一个向量,那么答案是微不足道的,但是正如我有2个一样,我不想在两个类中都重复方法dot
等。我想拥有一个定义dot
并将其用于子类的基向量类。
这是我尝试过的:
template<class T, class GLMVEC>
class Vec : public GLMVEC {
public:
T dot(const T& v) const {
return glm::dot(*this, v); // just return the glm::dot result
}
};
class Vec2 : public Vec<Vec2, glm::vec2> {
// Here's one problem, I want the constructor of glm::vec2
// but I can't with using glm::vec2::tvec2; as it's not a direct base class
};
class Vec3 : public Vec<Vec3, glm::vec3> {
// Same problem
};