Matlab能够区分“适当”矩阵乘法和不同运算符的元素方式矩阵乘法,因此前者的执行形式为A * B
,后者的执行形式为A .* B
。这很方便,我想知道是否有一种方法可以在C++中为自定义矩阵类实现相同的功能(并且同样适用于./
和.^
)。也就是说,我不知道是否有可能通过定义宏或任何其他方法,有像真正的编译如下:在C++中定义类似Matlab的。*运算符?
MyMatrix A(2,3), B(2,3), C(2,3); //These are 2x3 matrices for the sake of concreteness
C = A .* B; //Similarly for ./, .^
我试着用一些简单的功能做这个#define
S和无法获得它工作,所以我想我会把它放到SO上。我可以接受'错过',即如果.*
无法正常工作,但不知何故:*
可以,足够好。注意,我专门寻找操作符 - 当然,这种行为可以通过函数以明显的方式完成,但类似Matlab的操作符会非常方便。
如果你发现你显然不会使用这种“很方便”哟用于“正常”目的的矩阵 - 线性算子,用*作为组成 - 但对于其他情况,其中'*'作为矩阵乘法可能没有太大意义。所以你可能需要两个不同的类,一个用于线性映射矩阵,另一个用于元素矩阵,每个都有自己的'operator *'。如果您需要从一种表示法转到另一种表示法,则可以添加显式或隐式转换函数。这样,它不仅会更明了,而且比Matlab版本更安全。 – leftaroundabout 2012-08-06 00:38:30
@leftaroundabout你是否熟悉Matlab?就像我描述的那样,情况就存在那里。在任何情况下,已经使用Matlab(和矩阵)了很多,肯定会出现这样的情况:对于给定的矩阵,您将在某一点上想要对其进行标准矩阵乘法运算,而在另一种情况下, 。所以这会很方便。 – 2012-08-06 01:22:06
据我所知,matlab中的'。*'是做标量乘,它与矩阵乘法不同。在C++中,您可以完全使用一个运算符'*'并执行运算符/函数重载。 – texasbruce 2012-08-06 02:08:13