很抱歉,如果之前已经提出这个问题。我真的不确定如何搜索它。
我要做的是为自己建立一个功能库,以便在我未来的学校工作中让生活更轻松。我建立了一组处理基于几何的东西的函数,比如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
答案 0 :(得分:1)
我建议使用命名空间:
namespace geometry {
class Vector3 {
...
};
}
namespace eigen {
using geometry::Vector3;
...
}
基本上,这将允许您定义基本几何类型&操作,然后直接从其他命名空间中使用选定的部分。