将全局实例重构为指针

时间:2013-10-03 04:19:41

标签: c++ pointers reference global-variables

我正在研究一个有几个全局变量的CPP项目,例如:

class A;
class B;
A a;
B b;

我希望可以选择在a和b的不同值之间切换。理想的情况下, 根本不应该有全局变量,或者它们应该是指针 这样我们就可以轻松切换了。例如。如果我们有:

B* b; A* a;

然后我们可以在运行时更改a和b。但问题是变量 a和b在项目中被称为数百次,我将不得不改变

中的所有这些行
a.something 

a->something

可能需要一段时间。有更快的方法吗?

2 个答案:

答案 0 :(得分:0)

# clean checkout from version control
find . -name *.c -exec perl -i -pe 's/\<a\.(\w+)/a->\1/g' \{} \; 
# review changes, fix the places the regex got wrong

答案 1 :(得分:0)

取决于A的复杂程度......

#include <iostream>

struct A {
  virtual void print() { std::cout << "A\n"; }
};

struct D : public A {
  virtual void print() { std::cout << "D\n"; }
};

struct Ref {
  void set(A* obj) { o = obj; }
  void print() { o->print(); }
  A* o;
};

Ref a;

int main() {
  a.set(new A());
  a.print();
  // switch a
  a.set(new D());
  a.print();
}