我正在为我的项目重构一个类,以适应int数据。代码相当复杂,试着举一个简单的例子如下:
struct A {
A(int a):a_(a) {} // Supports implicit conversion from int
int a_;
};
void print(A a) { cout<<a.a_<<endl; }
void x2(A *a) { // change a's value
a->a_ *= 2;
}
int main() {
int b = 2;
print(b); // pass int as A without any problem
x2(&b); // pass int* as A* - failed
cout<<b<<endl; // b is supposed to changed by x2()
}
在这种情况下,模板可能是一个不错的选择,但我担心用模板重写整个课程将是一项巨大的努力,并且会对准备性造成一点损害,尤其是对我的同事来说。
有没有其他方法可以将"int*"用作"A*"?
不,没有"路"。您在这里试图做的是违反x2
上的约定,即a
将是指向A
的有效指针。
最简单的更改是将x2
更改为:(这里真的没有必要使用指针)
void x2 (A& a) {
a.a_ *= 2;
}
然后用一个包裹在int周围的值来调用它(就像@jrok建议的那样):
A a(2);
x2(a);
如果您需要打印,请为A.提供operator<<