正如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
,在这种情况下使用模板模板参数还有什么优势吗?