模板模板参数是否应该用于具有状态的策略?

时间:2015-12-07 09:52:51

标签: c++ templates

正如this帖子所指出的那样,在'Modern C++ Design - Generic Programming and Design Patterns Applied'中,Andrei Alexandrescu使用带有模板模板参数的类来实现策略模式:

// Library code
template <template <class> class CreationPolicy>
class WidgetManager : public CreationPolicy<Widget>
{
   ...
};

现在,假设策略类具有状态(即它具有非静态成员),并且主机类存储策略类的对象:

// Library code
template <template <class> class Logger>
struct Algorithm
{
   Algorithm(Logger<Event> &logger) : logger_(logger) {}
   ...
   private:
       Logger<Event> &logger_; 
};

用户可能会写这样的东西:

using MyLogger = ConcreteLogger<MyEvent>;
MyLogger log;
Algorithm<ConcreteLogger> alg(log);

由于用户需要实例化ConcreteLogger,在这种情况下使用模板模板参数还有什么优势吗?

0 个答案:

没有答案