我尝试阅读Boost文档,但我不理解这个表达式概念。 Matrix类继承了一个matrix_expression类,我不明白这个类是用来做什么的。
谢谢。
最佳答案
它是一种遏制某种行为的机制。
matrix_container
顾名思义就是一个容器。
matrix_expression
是一个表达式(类似于两个矩阵的加法)。
它基于 RCTI 惯用法,有助于库的设计。
举个例子,假设您想将赋值写入类对象(成员函数)。假设一个比 ublas 更简单的上下文,您只有一个矩阵类型并且想要编写:
template <typename _E>
void assign( _E const & e );
问题在于,您可以将套接字或 std::string 分配给矩阵。通常,人们会试图避免这种情况;-)
所以,更好的方法是这样写:
template <typename _E>
void assign( matrix_expression<_E> const & e ) ;
现在您只能分配矩阵表达式。 我强调,这只是逻辑,而不是 ublas 的具体设计 - 然而,逻辑始终是这个。
现在假设您想用两个矩阵,或者用一个矩阵和一个表达式,或者用两个表达式编写自己的运算符 *= ,也许对于 *= 矩阵,您想使用 lapack。
matrix_expression
和 matrix_container
之间的区别将帮助您编写此操作的专用版本。
PS:我强调,这是潜在的逻辑/动机,而不是实际发生的情况。如果您更深入地研究 ublas 的内部,您会更多地看到相同的逻辑是如何使用的。
关于c++ - Boost.uBLAS 中的矩阵表达式和 vector 表达式类是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16287151/