代码之家  ›  专栏  ›  技术社区  ›  Makogan

有没有可能在不编辑源文件的情况下为库(Eigen)中的类创建新功能?(C++)

  •  1
  • Makogan  · 技术社区  · 5 年前

    上下文

    GLM公司: vec4(v1, v2);

    Vector4f v; v << v1, v2;

    GLM可以就地完成,这意味着您可以在函数调用中或在复杂行的中间添加多个数学运算。

    使用特征值的方式,你必须进行连接,将它存储在一个变量中,然后使用该变量。就句法而言,艾根的方法在客观上不那么通用。

    考虑到这一点,我在想也许我可以为小的情况(4维对象)添加构造器,让Eigen感觉更像glm。然而,由于类定义在eigen的源代码中,这意味着理解和修改它的源代码,这样做的缺点是必须维护代码,除非我可以将它合并到eigen的源代码中,这可能需要比我愿意等待的时间更长的时间,甚至不能被接受。

    我可以获取在其他地方定义的类并创建一个新的构造函数吗?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Jan Schultke    5 年前

    您需要的功能是 扩展函数 . 一些语言,如科特林语 have them ,但是C++没有。所以你运气不好。

    如果您创建了自己的向量库,这不会有问题,因为您可以创建一个构造函数,该构造函数隐式地从其他向量转换而来 operator 隐式转换为其他向量。如果您在库之间迁移,并且不需要保持两个版本的最新,那么您可以添加这两个函数并解决几乎所有的兼容性问题。

    至少可以在类之外定义运算符,例如:

    glm::vec4 operator+(glm::vec4 a, Eigen::Vector4f b) {
        return a + eigen_vector_to_glm_vector(b);
    }