如何使用模板扩展GLM vec2和vec3?

时间:2019-12-14 08:29:39

标签: c++ templates glm-math

我有一个类Vec2和一个类Vec3,并且我希望它的行为类似于glm vec2vec3。但是我想要像dotcross这样的附加方法,它们不是glm中的成员函数(它是单独的函数)。如何创建我的类Vec2Vec3,使它们为glm vec2vec3,但具有附加方法?如果我只有一个向量,那么答案是微不足道的,但是正如我有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
};

0 个答案:

没有答案