2013-05-07 52 views
1

我有以下類:概念與某些屬性的一類不會被邏輯定義

class Foo 
{ 
public: 
    ... 
private: 
    int a; 
    int b; 
    int c; 
    int d; 
    int e; 
    int f; 
} 

該計劃將影響值一些這些變量和其他不應該在一個有效的狀態我的程序的邏輯。處理那些不應該有價值的變量的好方法是什麼?我應該給他們一個隨機值(例如68823773)嗎?這對我來說似乎不是一個乾淨的解決方案。

+1

如果你的程序沒有使用零,你可以使用它。或者,您可以添加一個bool來說明是否正在使用相應的變量。 – olevegard 2013-05-07 16:42:01

+3

另一種方法是使用'boost :: optional '。 – juanchopanza 2013-05-07 16:44:17

+0

如果您不會將這些值用於任何常規目的,您可以將未使用的變量設置爲'std :: numeric_limits :: max'或'std :: numeric_limits :: min'。 – 2013-05-07 16:49:05

回答

4

如果你沒有一個「奇異」值(例如,0或-1)來表示一個特殊值,可以使用boost::optional

0

如果你想避免使用Boost庫,那麼你可以使用std :: pair而不是int。然後,您可以適當地設置布爾標誌來確定一個有效的狀態。

例如:

std::pair<int, bool> value; 

之後當該值有一個有效的狀態則可以設置如下的標誌:

value.first = <some_value>; 
value.second = true; 

同樣可能在類復位構件的其餘部分。要檢查值是否處於有效狀態,你可以使用

if (value.second) 
{ 
    // true means valid state 
    // Do your processing here 
} 

而且最後可能會使用std數組或std ::矢量::對,而不是一系列的變量。這樣,對於某些特定的情況,您可以爲某個索引設置標誌,並將所有其他索引的標誌重置(設置爲false)。