我有一个类 Parameter,其目的是表示某个参数可以包含的可能值(实现两个关键方法,GetNumValues() 和 GetValue(int index))。
通常一个逻辑参数(参数值是位标志)最好由 Parameter 类的 2 个或多个实例表示(即一个 Parameter 可以是 1 或 2,一个 Parameter than 可以是 4 或 8,而不是一个 Parameter than can为 5、6、9 或 10)。为了解决这个问题,我想创建一个包含参数的 CompositeParameter 类,并将根据它所拥有的参数组合实现 GetNumValues() 和 GetValue() 函数。
并且由于 CompositeParameter 正在组合参数以使它们充当单个参数,因此“CompositeParameter 是一个参数”关系是有意义的。所以我发现自己的情况是,我有一个类,它组成了它继承自的类的对象,这似乎不正确。但与此同时,我不明白为什么更高级别的代码不能将 CompositeParameters 和 Parameters 完全相同。
我能想到的唯一选择是让 CompositeParameter 简单地组合参数,而更高级别的代码只会处理 CompositeParameters。但是,这有点浪费 b/c,一般情况下 CompositeParameters 只包含一个参数。
想法?
class Parameter
{
public:
virtual unsigned int GetNumValues() const {...}
virtual unsigned int GetValue(unsigned int index) const {...}
}
class CompositeParameter : public Parameter
{
public:
// product of GetNumValues() of each item in mParamList
virtual unsigned int GetNumValues() const {...}
// allow all the possible combinations of the items in mParamList to be
// treated as one parameter. i.e. if mNumParams = 2, this would be analogous
// to getting the row and col index of a matrix from index, and combining
// the mParamList[0]->GetValue(row) and mParamList[1]->GetValue(col)
virtual unsigned int GetValue(unsigned int index) const {...}
private:
static const unsigned int MAX_PARAMS = 10;
unsigned int mNumParams;
const Parameter* mParamList[MAX_PARAMS];
}