// ********** TemplateDemo.cpp ********** #include #include using namespace std; class AbstractClass { public: void templateMethod() { primitiveOperation1(); primitiveOperation2(); } protected: virtual void primitiveOperation1() = 0; virtual void primitiveOperation2() = 0; }; class ConcreteClass1 : public AbstractClass { protected: void primitiveOperation1() {} void primitiveOperation2() {} }; class ConcreteClass2 : public AbstractClass { protected: void primitiveOperation1() {} void primitiveOperation2() {} }; const int MAX = 2000; int main() { hrtime_t t1 = gethrtime(); for (int i=0; itemplateMethod(); concrete2->templateMethod(); } } hrtime_t t2 = gethrtime(); cout << (t2-t1)/1000000 << " "; return 1; }