我有两个类 A 和 B。产品 A*B 应该是 B 类型。由于 B 类型的变量会占用大量内存,所以我需要避免像这样的操作B_1 = B_1 + (A_1 * B_2)
,其中(A_1 * B_2)
会临时分配。换句话说,我需要B_1 += A_1 * B_2
.
我试过这个:
struct A {
int a;
};
struct B {
double b[size];
void operator += (pair<A*, B*> & lhsA_times_rhsB){
A & lhsA = *lhsA_times_rhsB.first;
B & rhsB = *lhsA_times_rhsB.second;
b[lhsA.a] += rhsB.b[lhsA.a];
}
};
inline pair<A*, B*> operator*( A& lhsA, B& rhsB){
return make_pair(&lhsA, &rhsB);
};
int main(){
A A_in;
B B_in, B_out;
pair<A*, B*> product = A_in*B_in;
B_out += product; //this works!
B_out += A_in*B_in; //doesn't work!? (Compiler: "No viable overloaded '+='")
return 0;
}
为什么
B_out += product
可以,但B_out += A_in * B_in
不行?有没有更好的方法来实现
+=
这个用途的 -operator?也许没有定义辅助对象pair<A*, B*>
?