#include <iostream>
using namespace std;template<typename Derived>
class SegBase{ public: //流程框架void segment()
{ for (int i = 0; i < 2; i++) { deal(); //流程内的某个核心部件函数 } }void deal_default()
{ cout << "Use SegBase default" << endl; }void deal()
{ static_cast<Derived*> (this)->deal(); }};class Seg : public SegBase<Seg>
{ public:void deal()
{ //Seg改写deal函数 cout << "Use Seg modified " << endl; }};class Seg2 : public SegBase<Seg2>
{ public: typedef SegBase<Seg2> Base;void deal()
{ //Seg2复用SegBase的默认deal函数 Base::deal_default(); }};void run()
{ //Seg seg; //seg.segment();Seg2 seg2;
seg2.segment();}int main(int argc, char *argv[])
{ run(); int test; cin >> test; return 0;}