2

我试过阅读 Boost Documentation,但我不明白这个表达概念。Matrix 类继承了一个matrix_expression 类,我不明白这个类是干什么用的。

谢谢你。

4

1 回答 1

3

它是一种包含某种行为的机制。

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 的内脏,您将看到更多如何使用相同的逻辑。

于 2013-07-09T17:13:33.750 回答