在Visual c++中开发一个用于高效数值计算的静态库

Develop a static library in Visual C++ for efficient numerical computation

本文关键字:高效 用于 计算 静态 一个 c++ Visual 开发      更新时间:2023-10-16

我有以下问题:我需要开发一个静态库(*.lib)在visual c++高效的数值计算。我已经开始定义一个新的模板类"矩阵",并且我已经了解到使用表达式模板可以实现最佳效率。但是我也读到(我也经历过),我不能在静态库中包含表达式模板,因为您需要显式地对所有组合进行静态化。

所以,例如,如果我想在一个新项目中做:

Matrix<int> M_A, M_B, M_C, M_D;
M_C = M_A + M_B + 2 * M_D;
M_C = 2 * M_B;
M_C = M_A + 2 * M_B;

导入我的*。我必须在我的静态库中建立3种不同的组合,以允许相等M_C = Expression.

是否有一种方法或"最佳实践"来简化静态库中的显式定位?或者,是否存在一种替代表达式模板的方法,可以在不出现导出问题的情况下实现相同的效率?为了澄清,我需要保留紧凑符号的可能性,如:M_C = M_A + M_B + 2 * M_D;

谢谢。

p。为了更好地解释,我添加了更多的细节:

如果我创建我的静态库,我可以在外部项目中使用它,但我必须导出所有模板专门化。模板类__declspec(dllexport)矩阵;模板类__declspec(dllexport)矩阵;

等等…

问题是我必须对所有可能的表达式做同样的事情来允许等式(例如,M_A = M_B + M_C)。我必须导出这样的东西:模板类LibraryNameSpace::Matrix const &__thiscall LibraryNameSpace::Matrix::operator=,int>(类LibraryNameSpace::myExpression,int>);

不把所有的代码都包含在lib文件中,对我来说没有问题:我可以毫无问题地使用我的库。这个问题与静态库中的封闭表达式模板有关。我需要这样做来屏蔽代码,不让最终用户能够阅读它

除非您出于教育目的,否则您可能不应该从头开始开发它。

看看闪电战++。根据它的手册,它编译成一个静态库。

在开发自己的ET线性代数库之前,您是否考虑过使用现有的库?

你有一个选择(没有特别的顺序):Eigen, Blaze, uBlas和blitz++。

它们都是使用表达式模板来摆脱混合矩阵/向量操作的临时库,其中一些(Blaze和Eigen)更进一步,专门为特定的矩阵/向量操作提供模板(智能表达式模板)。所有提到的库都是由一群人(一些是科学的)开发的,并且已经被调试和测试,并在开放的科学出版物中记录,并使用wiki等。

我建议考虑重新发明轮子是否适合这里,因为这个话题的复杂性。如果您想要提高效率,最简单的答案是使现有的高效库适应您的需要。