コンパイル時に構造体メンバーのオフセットを出力しようとしています。オフセットを知る必要があり、後でメンバーが同じオフセットにとどまるように #error を追加したいと思います。VS で既にそれを行うための作業方法を見た方法がいくつかありますが、私は GCC を使用しており、それらは適切に機能しませんでした。
ありがとう!
これをあなたと同じファイルに入れてくださいmain()
:
template <bool> struct __static_assert_test;
template <> struct __static_assert_test<true> {};
template <unsigned> struct __static_assert_check {};
#define ASSERT_OFFSETOF(class, member, offset) \
typedef __static_assert_check<sizeof(__static_assert_test<(offsetof(class, member) == offset)>)> PROBLEM_WITH_ASSERT_OFFSETOF ## __LINE__
そしてこれはあなたの中にありますmain()
:
ASSERT_OFFSETOF(foo, member, 12);
C++11 がなくても動作するはずです。その場合、次のように定義できますASSERT_OFFSETOF
。
#define ASSERT_OFFSETOF(class, member, offset) \
static_assert(offsetof(class, member) == offset, "The offset of " #member " is not " #offset "...")