我有以下问题:我需要在 Visual C++ 中开发一个静态库 (*.lib) 以进行高效的数值计算。我已经开始定义一个新的模板类“矩阵”,并且我已经读到使用表达式模板可以实现最佳效率。但我也读过(并且经历过)我不能将表达式模板包含在静态库中,因为您需要显式地实例化所有组合。
所以 - 例如 - 如果我想在一个新项目中做:
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;
导入我的 *.lib 文件,我必须在我的静态库中创建 3 种不同的组合以允许等式 M_C = Expression。
有没有一种方法或“最佳实践”来简化静态库中的显式实例化?或者,有没有表达模板的替代方案,可以在没有导出问题的情况下实现相同的效率?为了澄清起见,我需要保留紧凑符号的可能性,例如: M_C = M_A + M_B + 2 * M_D;
谢谢你。
附言。我添加了更多细节以更好地解释:
如果我创建我的静态库,我可以在外部项目中使用它,但我必须导出所有模板专业化。模板类 __declspec(dllexport) 矩阵;模板类 __declspec(dllexport) 矩阵;
等等...
问题是我必须对所有可能的表达式做同样的事情以允许等式(例如,M_A = M_B + M_C)。我必须导出类似这样的内容:模板类 LibraryNameSpace::Matrix const & __thiscall LibraryNameSpace::Matrix::operator=,int>(class LibraryNameSpace::myExpression,int>);
如果不将所有代码包含在 lib 文件中,对我来说没有问题:我可以毫无问题地使用我的库。该问题与在静态库中包含表达式模板有关。我需要这样做来屏蔽代码并且不让最终用户能够阅读它。