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

Create a policy template class with a policy template class factory?

本文关键字:策略 创建 工厂      更新时间:2023-10-16

我想创建一个模板化的类工厂方法,该方法反过来创建一个继承策略模板的模板化类本身。下面是我尝试的工厂方法:

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;
  }
};

但是我想创建的Widget本身应该继承自模板策略类:

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"或""type/value mismatch at argument 1 in template parameter list for <template <template<class Created> class IntPolicy> class Widget"

我想从类型级别函数的角度思考是有帮助的:

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

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

所以无论Widget<T>中的T是什么,它都需要是一个接受一个完整类型(* -> *)的模板。但在你的案例中,T是什么?A typename T ( *)。您不能使用BigInt模板。

所以我想把typename T改成template <class> class T应该可以了