使用策略模板类工厂创建策略模板类?

时间:2015-08-03 22:46:25

标签: c++ templates

我想创建一个模板化的类工厂方法,该方法又创建一个继承自策略模板的模板化类。以下是我为工厂方法尝试的内容:

n

但我想制作的Widget本身应该继承自模板策略类:

template <typename T, template <class Created> class CreationPolicy>
class WidgetManager : public CreationPolicy<Widget<T>>
{
public:
  WidgetManager() {};
  static Widget<T>* doAll(){
    Widget<T> *t = WidgetManager::Create(); //the static create method comes from CreationPolicy
    return t;
  }
};

template<template <class Created> class IntPolicy> class Widget : public IntPolicy<Widget> {}; 一样:

IntPolicy

这样做的正确语法是什么?我尝试的一切都给了我类型错误。例如,上面给出了“template <class T> struct BigInt { int LOGNOW = 99; }; template <class T> struct SmallInt { int LOGNOW = 5; }; ”或template argument 1 is invalid

1 个答案:

答案 0 :(得分:1)

我想在类型级别函数方面有所帮助:

Widget需要一个模板,需要1种类型才能成为一个完整的类型:

Widget :: (* -> *) -> *

所以T中的Widget<T>无论如何都需要是一个接受一个完整类型(* -> *)的模板。但是你的T是什么?一个typename T*)。您无法使用模板BigInt

所以我想将typename T更改为template <class> class T就可以了。