c++ - 在 Visual C++ 中开发静态库以进行高效的数值计算

标签 c++ visual-c++ metaprogramming static-libraries expression-templates

我有以下问题: 我需要在 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 = 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 文件中,对我来说没有问题:我可以毫无问题地使用我的库。该问题与在静态库中包含表达式模板有关。我需要这样做来屏蔽代码并且不让最终用户能够阅读它。

最佳答案

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

看看Blitz++ .根据它的手册,它编译成一个静态库。

关于c++ - 在 Visual C++ 中开发静态库以进行高效的数值计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16397823/

相关文章:

c++ - C++中的合并排序单链表因大输入而失败

c++ - VC++ 2010 : Error with Show open dialog after conversion from VC6++

C++ 和 SDL2 网格移动太快

visual-studio-2010 - 将 opencv 库添加到 Windows 窗体应用程序时出现链接器错误

ruby 。如何知道定义了哪个类的实例方法?

c++ - 如何使用此 C++ 模板函数。简单的初学者问题

c++ - 在基于范围的 for 循环中报告奇怪的语法错误

c - 涡轮执行力和视觉执行力的差异

Python 格式化并验证类变量而不实例化它

c++ - 编译错误:使用 constexpr 声明 std::array 大小