我有以下问题:
我需要在Visual C++中开发一个静态库(* .lib),以进行有效的数值计算。
我已经开始定义一个新的模板类“Matrix”,并且我读到表达式模板可以实现最佳效率。
但是我也已经读过(并且我已经经历过)我不能将表达式模板包含在静态库中,因为您需要显式地使所有组合均化。
所以-例如-如果我想在一个新项目中做:
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 =表达式。
是否有一种方法或“最佳实践”来简化静态库中的显示控件?或者,表达模板的替代方法可以实现相同的效率而不会出现导出问题?
为了澄清起见,我需要保留紧凑表示法的可能性,例如:M_C = M_A + M_B + 2 * M_D;
谢谢。
附言
我添加更多细节以更好地解释:
如果创建静态库,我可以在外部项目中使用它,但是我必须导出
所有模板特化。
模板类__declspec(dllexport)Matrix;
模板类__declspec(dllexport)Matrix;
等等...
问题是我必须对所有可能的表达式进行相同操作以允许相等(例如,M_A = M_B + M_C)。
我必须导出以下内容:
模板类LibraryNameSpace::Matrix const和__thiscall LibraryNameSpace::Matrix::operator =,int>(类LibraryNameSpace::myExpression,int>);
如果不将所有代码都包含在lib文件中,那么对我来说就没有问题:我可以毫无问题地使用我的库。该问题与将表达式模板包含在静态库中有关。我需要这样做来掩盖代码,并且不使最终用户能够阅读它。
最佳答案
除非您出于教育目的这样做,否则您可能不应该从头开始发展自己。
看看Blitz++。根据其手册,它将编译为静态库。
关于c++ - 在Visual C++中开发静态库以进行有效的数值计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16397823/