我可以将指针转换为我的班级吗?

时间:2013-07-18 09:55:47

标签: c++ casting implicit-conversion

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

1 个答案:

答案 0 :(得分:2)

不,没有“方式”。您在此处尝试执行的操作违反了x2上的合同,即a将成为指向A的有效指针。

最简单的改变是将x2更改为: (这里真的没有必要使用指针)

void x2 (A& a) {
    a.a_ *= 2;
}

然后使用包含在int中的A值调用它(如@jrok建议的那样):

A a(2);
x2(a);

如果您对打印感到沮丧,请为A。

提供operator<<