【发布时间】:2014-03-30 04:32:50
【问题描述】:
对于std::array 和std::vector,有什么简单的方法可以重载各种算术运算符(+、-、*、/、+=、...)?算术运算是按成员计算的。类似于以下内容
template<class ContainerT, class opT>
ContainerT operator opT(ContainerT const& a, ContainerT const& b)
{
....
}
template<class ContainerT, class opT>
ContainerT operator opT=(ContainerT const& a, ContainerT const& b)
{
....
}
【问题讨论】:
-
好吧,我现在可以告诉你,你至少得让它们全部超载一次。不过,每个运算符只需要一个重载就应该可以实现。
-
容器应该是数字吗? 1xN 或 Nx1 矩阵?无论如何,除非您使用别人的代码,否则它不会比编写 代码 更容易。
-
不清楚你想做什么,你想要一个地图,一个折叠......就地评估一个函数...... C++给你很多绳子......数组加一个int的意思是作为一个元素添加还是每个元素都添加?
-
这就是
std::valarray的用途。 -
您不能将运算符设为模板参数,但您可以使用“预处理器”宏将每个运算符设为单行。对于宏的所有弊端,如果您使用
#ifdef X/#error Macro X already defined/ ... /#undef X的形式,那将非常安全。
标签: c++ arrays vector containers