我想创建一个模板化的类工厂方法,该方法又创建一个继承自策略模板的模板化类。以下是我为工厂方法尝试的内容:
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
答案 0 :(得分:1)
我想在类型级别函数方面有所帮助:
Widget
需要一个模板,需要1种类型才能成为一个完整的类型:
Widget :: (* -> *) -> *
所以T
中的Widget<T>
无论如何都需要是一个接受一个完整类型(* -> *
)的模板。但是你的T
是什么?一个typename T
(*
)。您无法使用模板BigInt
。
所以我想将typename T
更改为template <class> class T
就可以了。