我需要修改c++类成员的顺序。例如:
class B {
public:
int i;
int j;
int k;
...
};
是
class B {
public:
int j;
int k;
int i;
...
};
问题是在我的大型代码库中有一些奇怪的代码,这些代码依赖于类成员的相对位置。例如,有些函数会假设成员j的地址小于成员k的地址。
是否有CASE工具可以帮助我识别读取类成员地址的任何代码?
我不知道有任何工具可以解决您的问题,但我会定义一个支持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
类的整个对象的地址