为库提供直通界面

时间:2011-05-26 20:47:03

标签: c++ interface

很抱歉,如果之前已经提出这个问题。我真的不确定如何搜索它。

我要做的是为自己建立一个功能库,以便在我未来的学校工作中让生活更轻松。我建立了一组处理基于几何的东西的函数,比如3D矢量,点和平面以及它们所有相关的方法(点,交叉,比例)。

通过一些谷歌搜索,我发现Eigen library实现了我想要的一切,包括很多SSE的东西,以使它快速。

我不了解SSE以及他们在该库中所做的很多事情,所以我不想将它用作我的开发库。我的意思是,我想用我愚蠢的慢版本编写所有内容,我知道它们是如何工作的,所以我可以确保我做的一切正确。然后,一旦我确定数学出现正确,我想将其切换为使用Eigen库以提高效率。

有没有办法让它可以设置一个标志,或传递一个变量,(可能是一些模板的东西?)这样我就可以将我的代码从我的东西切换到Eigen的东西,而不必重写我的应用程序?

基本上我想在两个库之间建立一个标准接口。

Eigen库代码将包含在同一目录中。我有我的Geometry.h,然后是一个包含所有库的Eigen文件夹。

我不知道如何弥合两者之间的差距。我是否需要为所有东西编写包装器方法,以便它有一个通用的API?

编辑::
我还要补充一点,我希望尽可能快。对于可以多次调用的点,交叉和矩阵函数,我不想通过虚函数或太复杂的包装方法来对性能产生负面影响。

我问得太多了吗?

结束编辑

这样的事情就是我想要的。但我很确定这不符合我的要求。


#ifdef BASIC_LIBRARY
  class Vector3
  {
    float x,y,z;
    float dot(Vector3);
  }
#endif
#ifdef EIGEN_LIBRARY
  //some sort of passthrough to eigen library
#endif

1 个答案:

答案 0 :(得分:1)

我建议使用命名空间:

namespace geometry {
    class Vector3 {
       ...
    };
}

namespace eigen {
    using geometry::Vector3;

    ...
}

基本上,这将允许您定义基本几何类型&操作,然后直接从其他命名空间中使用选定的部分。