1

我需要修改我的 C++ 类成员的顺序。例如:

class B {
public:
int i;
int j;
int k;
...
};

变成

class B {
public:
int j;
int k;
int i;
...
};

问题是我的大型代码库中有一些奇怪的代码,这些代码取决于类成员的相对位置。例如,某些函数会假设成员 j 的地址小于成员 k 的地址。

是否有任何 CASE 工具可以帮助我识别读取类成员地址的任何代码?

4

1 回答 1

3

我不知道有什么工具可以解决你的问题,但我会定义一个类,它支持所有int类型的运算符并重载 & 运算符,这样运算符的结果就不能转换为指针。然后我会使用这个类而不是int在你的类成员定义中,并查看编译器给出错误的地方。

就像是

class IntWrapper {
 public:
  IntWrapper() { }
  IntWrapper(const int x) { }         // don't care about implementation as we 
  operator int() const { return 0; }  // want compile-time errors only
  IntWrapper& operator ++() { return *this; }
  IntWrapper& operator ++(int) { return *this; }

  ...
  void operator &() const { } // make it void so it would cause compiler error
};

接着:

class B {
 public:
  IntWrapper i;
  IntWrapper j;
  IntWrapper k;
 ...
};

这无助于使用boost::addressof函数或一些肮脏reinterpret_cast的引用,但addressof可能根本不会在您的项目中使用,以及reinterpret_cast<char&>技巧(谁会将它用于纯整数?)。

您还应该关心获取整个B类对象的地址。

于 2013-06-08T10:13:56.123 回答