我正在为我的项目重构一个类以适应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 *”?
答案 0 :(得分:2)
不,没有“方式”。您在此处尝试执行的操作违反了x2
上的合同,即a
将成为指向A
的有效指针。
最简单的改变是将x2
更改为:
(这里真的没有必要使用指针)
void x2 (A& a) {
a.a_ *= 2;
}
然后使用包含在int中的A值调用它(如@jrok建议的那样):
A a(2);
x2(a);
如果您对打印感到沮丧,请为A。
提供operator<<