混乱的模板代码

Confusing template code

本文关键字:代码 混乱      更新时间:2023-10-16

这是什么意思

template < template < template < class > class, class > class Param >

我从未使用过template <template <X>>类型的语法

从另一个网站上找到的

template < template < template < class > class, class > class Param >
struct Bogus {

int foo() {
printf("okn");;
}
};

感谢对该语法的任何提示。谢谢你

更新:看起来有一些解释已经存在,请参考下面的Jerry的解决方案

它被称为模板模板参数。这已经讨论过很多次了:

c++模板语法模板参数
模板模板参数在c++中的一些用途是什么?
使用模板模板类实参作为形参

等。

c++中有三个本体层:类型模板

模板实例化是一个类型。对象是某一类型的,并且它具有一个值。

所有三种实体都可以作为模板参数出现:

template <int N, typename T, template <typename> C>
{
  C<T> array[N];
};

参数按此顺序分为"非类型模板参数"、"模板参数"answers"模板模板参数"(我想)。

拥有模板参数可能非常有用,例如,如果您想允许在任意容器上对某些内容进行参数化(特别是使用可变模板!):

template <typename T, template <typename...> Container>
void print(const Container<T> & c)
{ /* ... */ }
顺便说一下,当类模板包含成员时,必须分别使用typenametemplate来根据它们的性质对它们进行称呼(什么都不说意味着要引用):
template <typename T> struct Foo
{
  T value;
  typedef T * pointer;
  template <typename S> struct Nested;
};
// now refer to them as:
Foo<T>::value;
typename Foo<T>::pointer;
template<typename S> Foo<T>::template Nested<S>;