delegate vs policy

    技术2025-08-06  16

    1. delegate

     

    class HelloWord { public: struct InputDelegate { virtual void BuildGround() = 0; }; struct OutputDelegate { virtual void BuildWall() = 0; }; virtual void Run(InputDelegate* in, OutputDelegate* out); }; class DirectInput: public HelloWorld::InputDelegate { public: virtual void BuildGround() { cout << "DirectInput" << endl; } } class DirectOutput: public HelloWorld::OutputDelegate { public: virtual void BuildWall() { cout << "DirectOutput" << endl; } } class DirectRun { public: DirectRun() { hello_ = new HelloWorld; } void Run() { DirectInput* in = new DirectInput; DirectOutput* out = new DirectOutput; hello_->Run(in, out); } private: HelloWorld* hello_; } 

    如果要从文件输入,可定义一个 class FileInput: public HelloWorld::InputDelegate;

     

    2. policy

     

    template <class Host> class AspectDirectInput { public: void Input() {} }; template <class Host> class AspectDierctOutput [ public: void Output() {} }; class HelloWorld: public AspectDirectInput, public AspectDirectOutput { void Run() { Input(); // from AspectDirectInput Output(); // from AspectDirectOutput } } 

    如果要定义从文件获得输入,可写个AspectFileInput类即可

     

    policy 那是相当优雅啊。

    最新回复(0)