我试过阅读Boost文档,但我不理解这个表达式的概念。矩阵类继承了一个matrix_expression类,我不明白这个类是用来做什么的。
谢谢。
这是一种包含某种行为的机制。
一个matrix_container
是——顾名思义——一个容器。
A 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
之间的区别可以帮助您编写该操作的专门版本。