我试过阅读 Boost Documentation,但我不明白这个表达概念。Matrix 类继承了一个matrix_expression 类,我不明白这个类是干什么用的。
谢谢你。
我试过阅读 Boost Documentation,但我不明白这个表达概念。Matrix 类继承了一个matrix_expression 类,我不明白这个类是干什么用的。
谢谢你。
它是一种包含某种行为的机制。
Amatrix_container
是 - 正如单词所说 - 一个容器。
Amatrix_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 的内脏,您将看到更多如何使用相同的逻辑。