我有以下代码片段:
Vec& Vec::operator+=(const double x)
{
return apply([x](double y) {return x + y;});
}
Vec& Vec::operator-=(const double x)
{
return apply([x](double y) {return x - y;});
}
Vec& Vec::operator*=(const double x)
{
return apply([x](double y) {return x * y;});
}
Vec& Vec::operator/=(const double x)
{
return apply([x](double y) {return x / y;});
}
这些方法只是操作符号不同。是否有一种使用宏来简化编写这些方法的方式?
#define operate(op) Niz& Niz::operator##op=(const double x) { return apply([x](double y) {return x ##op y;}); }
这样的东西,但是由于需要替换的字符是运算符而不是字面量,所以这是不允许的。 - Igor Ševo##
。##
用于连接宏参数以形成完整的 C++ 标记(例如+=
)。你不能只是在每个宏参数使用前面写上它。 - Lightness Races in Orbitx
并将每个元素除以x
,而是从x
中减去每个元素,并将x
除以每个元素。 - Walter+=
与+=
而不是+
。此外,/=
更有效地实现为operator*=(1/x)
:节省了dim-1
个除法(比乘法更昂贵)。 - Walter