2013-05-07 51 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)。