Below is a trivial example how to design a library with policy classes.
#include <iostream> #include <string> using namespace std; template<class T> struct HelloPolicy { static void saySomething(const T& t) { cout << "Hello World, " << t.getName() << endl; } }; template<class T> struct ByePolicy { static void saySomething(const T& t) { cout << "Bye World, " << t.getName() << endl; } }; struct Foo { string getName() const { return "Foo"; } }; struct Bar { string getName() const { return "Bar"; } }; template<template <class> class Policy> class FooPolicy : public Policy<Foo> { public: void doSomething() { Foo foo; Policy<Foo>().saySomething(foo); } }; template<template <class> class Policy> class BarPolicy : public Policy<Bar> { public: void doSomething() { Bar bar; Policy<Bar>().saySomething(bar); } }; int main() { FooPolicy<HelloPolicy> f1; f1.doSomething(); FooPolicy<ByePolicy> f2; f2.doSomething(); BarPolicy<HelloPolicy> b1; b1.doSomething(); BarPolicy<ByePolicy> b2; b2.doSomething(); return 0; }Output:
Hello World, Foo Bye World, Foo Hello World, Bar Bye World, Bar
No comments:
Post a Comment