g++ でコンパイルすると、コードにいくつかのデータ構造があります。
typedef struct {
int member;
// [...]
} Record;
class Data {
Record * records;
// [...]
static int method(const void * ptr);
};
そして、最初のバージョンが機能します:
int Data::method(const void * ptr) {
Record * rec_1 = (Record *) ptr;
return rec_1->member;
}
2 番目のバージョンは次のことを行いません。
int Data::method(const void * ptr) {
__typeof__(records) * rec_1 = (__typeof__(records) *) ptr;
return rec_1->member;
}
そしてエラーをスローします:
error: request for member ‘member’ in ‘* rec_1’, which is of non-class type ‘Record*’
私は__typeof__
マクロを使います。なぜなら、それがどのようなタイプであるかを気にしなくて済むからrecords
です。マクロを保持し__typeof__
、構造体のメンバーにアクセスできるようにすることは可能ですか?