1
當前運行時實現如下:編譯時檢查一個成員是否是最後一個類數據成員的任何方法?
#define ASSERT_LAST_Member(Class, Member) {Class foo; assert(((size_t)(&foo) + sizeof(foo)) == ((size_t)(&foo.Member) + sizeof(foo.Member)));}
我該怎麼辦靜態斷言在編譯時?我試圖做到這一點,但沒有奏效。
#define assert_static(e) \
do { \
enum { assert_static__ = 1/(e) }; \
} while (0)
#define ASSERT_LAST_Member(Class, Member) { assert_static(((size_t)&((Class*)0)->Member)+sizeof(((Class*)0)->Member)==sizeof(Class)) }
斷言數據成員是最後一個是代碼味道。設計有問題。你有沒有機會嘗試在結構的末尾放置一個動態大小的數組? –
說「不起作用」是模糊的。請參閱http://stackoverflow.com/questions/how-to-ask。 – jarmod
如果我在這個類中添加了另一個成員(例如協議),並且有許多地方可以對新成員進行操作,ASSERT_LAST_Member可以確保沒有錯過任何東西。 – pixar