在Visual c++中开发一个用于高效数值计算的静态库
Develop a static library in Visual C++ for efficient numerical computation
我有以下问题:我需要开发一个静态库(*.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等。
我建议考虑重新发明轮子是否适合这里,因为这个话题的复杂性。如果您想要提高效率,最简单的答案是使现有的高效库适应您的需要。
- 适用于 std::unique_ptr 的内存高效自定义删除器?
- 用于 3D 矢量的高效除法运算符
- 用于高效搜索的数据结构
- 用于开放寻址哈希表的高效C++ API
- OpenGL?中用于渲染的平面图像的高效传输
- 实现用于在图形中存储边缘的高效容器
- 用于双向随机访问的 C++ 高效数据结构
- 在unix/win32上高效计算用于日志记录的日期/时间戳
- 适用于cocos2d-x的高效稳定的YAML解析器
- C++ 高效的数据结构,用于附加具有覆盖的数据
- 用于存储 3d 点的高效数据结构
- 快速编译高效的排序算法(用于JIT编译)
- 用于 SDL 纹理的内存高效资源管理器
- C++:用于高效插入和检索自定义数据的数据结构
- 优雅高效的算法,用于增加"vector<pair>"值
- 用于构建高效哈希表的字符串的唯一属性
- 在Visual c++中开发一个用于高效数值计算的静态库
- 空间高效的c++矢量分配器,用于大矢量
- 处理大数据网络文件的高效算法,用于计算n个最近节点
- 函数,用于在C++中高效解析带有分隔符的多个数字