我可以转换一个指向我的类的指针吗



我正在为我的项目重构一个类,以适应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<<

最新更新