我有一個包含整數x量的結構,這是要求他們每個最後一個非零。這裏是我的結構:檢查任何結構成員0
struct thingy_t{
int a, b, c /* and so on */;
bool init();
};
隨着時間的推移,我會加入許多其他成員的結構,這使得它一個問題,如果我忘記檢查,如果它是非零。這就是爲什麼我想爲每個成員實現自動化的原因。
在我init
功能,它試圖獲取值的成員,並返回false,如果其中任何一個都是0
到目前爲止,我有這樣的:
bool thingy_t::init(){
a = GetValue(/* blah blah */); // Will return 0 if it can't find anything
b = GetValue(/* other blah */);
/* and so on */
// Check if any value is zero
for(int* i = (int*)this
; i < (int*)((char*)this + sizeof(interfaces_t))
; i++){
if(!*i) return false;
}
return true;
}
我要尋找一個更好的方式來做到這一點,將更可讀和更安全的內存,因爲我正在玩火(指針)在他們可能不是打算。
而且,遺憾的for
循環,我試圖使通過包裝它,它更具可讀性,但我可能使病情加重。
如果您要更改數據類型「* over time *」更大的問題,然後零值。做出更好的設計。 – Amit
如何製作一個包裝類,它的行爲像一個int(在正確的重載操作符的幫助下),但有一個約束,它不能爲零。然後使用這個'nonzero_int'而不是'int'作爲你的成員。 –
或者如果你改用'int'的數組,你可以很容易地檢查它們是否都是非零的。 –