内部模板类作为模板模板参数

时间:2018-08-26 02:13:14

标签: c++ templates template-templates

我有一个采用模板模板参数的类:

template <template <typename> class F>
class A {};

另一个带有内部模板化类的模板化类:

template <typename T>
class B {
  public:
    template <typename U>
    class C {};
};

我希望能够在模板化上下文中将C用作A的模板模板参数:

template <typename T>
using D = A<B<T>::C>;

但是,这会导致错误消息:

“模板模板参数的模板参数必须是类模板或类型别名模板”

我假设我在typename的声明中缺少templateD的魔咒,但是我无法弄清楚我的一生和错误消息并不是特别有用。

1 个答案:

答案 0 :(得分:2)

错误消息抱怨B<T>::C不是模板,因此与A的模板模板参数不匹配。

您需要使用template关键字来告诉编译器dependent name B<T>::C(取决于模板参数T模板。

template <typename T>
using D = A<B<T>::template C>;
//                ~~~~~~~~