我的应用程序中有很多类型的对象。所有都可以具有以下状态:UpToDate,OutOfDate,NotComputed。仅当对象的状态为UpTodate时,才允许对象的所有操作。如果对象的状态为NotComputed或OutOfDate,则唯一允许的操作是Compute和ChangeComputationParams。在gui中,我想仅在允许的情况下才显示对象上的操作。所以我有Operation Validatiors对象,为每个返回对象操作的对象是否应该显示在gui上。问题是,每当我向某个对象添加新操作时,我需要转到其OperationValidator类,并在那里添加新函数。一定是更好的方式。例如:
class Object1OperationValidator
{
Object1OperationValidator(Object1& object1)
{
mObject1 = object1;
}
bool CanDoCompute()
{
return true;
}
bool CanDoChangeComputationParams()
{
return true;
}
bool CanDoOperation1()
{
if(mObject1.State() != UpToDate )
return false;
else
return true;
}
.....
bool CanDoOperationN()
{
if(mObject1.State() != UpToDate )
return false;
else
return true;
}
}
答案 0 :(得分:0)
您可以使用模板化的类来实现验证函数:
template <class T>
void CheckBaseOperations
{
public:
CheckBaseOperations(T * obj)
:inst(obj)
{}
bool CheckOperation()
{
//...
return inst->State() != X;
}
public:
T * inst;
};
//----------------------------------------------------------------------
//for generic types
template <class T>
void CheckOperations : public CheckBaseOperations<T>
{
public:
CheckOperations(T * obj)
:CheckBaseOperations<T>(obj)
{}
};
//----------------------------------------------------------------------
template <> //specific validation for a certain type.
void CheckOperations <YourType> : public CheckBaseOperations<YourType>
{
public:
CheckOperations(YourType * obj)
:CheckBaseOperations<YourType>(obj)
{}
bool CheckOperationForYourType()
{
//...
return inst->State() != X;
}
};
如果您需要
,也可以CheckOperations
专门针对特定类型