1

我的应用程序中有许多类型的对象。都可以有以下状态: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;
    }

 }
4

1 回答 1

0

您可以将模板类与 Validate 函数的实现一起使用:

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专门针对特定类型

于 2013-10-31T12:51:55.367 回答