以下是什么意思
template < template < template < class > class, class > class Param >
我从未使用过template <template <X>>
种语法
得到了另一个website
template < template < template < class > class, class > class Param >
struct Bogus {
int foo() {
printf("ok\n");;
}
};
欣赏这种语法的任何亮点。谢谢
更新:看起来已经存在一些解释,请参阅下面的杰瑞解决方案
答案 0 :(得分:5)
它被称为模板模板参数。之前已经讨论了很多次:
Syntax of C++ Template Template Parameters
What are some uses of template template parameters in C++?
Use template template class argument as parameter
等
答案 1 :(得分:3)
C ++中有三个本体层: values , types 和 templates 。
模板实例化是一种类型。对象是某种类型的, 一个值。
所有三种实体都可以显示为模板参数:
template <int N, typename T, template <typename> C>
{
C<T> array[N];
};
该参数按此顺序分类为“非类型模板参数”,“模板参数”和“模板模板参数”(我认为)。
拥有模板参数非常有用,例如,如果您想允许在任意容器上进行参数化(特别是使用可变参数模板!):
template <typename T, template <typename...> Container>
void print(const Container<T> & c)
{ /* ... */ }
顺便提一下,当一个类模板包含成员时,你必须分别使用单词typename
和template
来根据它们的性质来解决它们(没有任何意思是你想要引用值的):
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>;