我刚刚开始学习 C++11,但我从未在新功能列表中看到过这种语法:
template <template <typename> class F>
struct fun;
它是什么以及它是如何工作的?
我刚刚开始学习 C++11,但我从未在新功能列表中看到过这种语法:
template <template <typename> class F>
struct fun;
它是什么以及它是如何工作的?
注意:您正在查看的是“旧”功能,并且早在 c++11 之前就已经存在。
template <template <typename> class F> struct Obj;
上面Obj
是一个模板,它只接受一个模板参数,它也是一个模板[1];这通常被称为模板模板参数[2]。
1)在这个特定的例子中,它只接受一个带有一个类型参数的模板。
2)链接到SO问题:模板模板参数
想象一下,您想对某个类模板进行包装;只要您可以为其指定模板参数,您就不会关心这是哪个类模板。
如果是这样,您可以使用模板模板参数,如下例所示:
template<template<typename T> class TemplateType>
struct Obj {
TemplateType< int> m1;
TemplateType<float> m2;
};
template<typename T>
struct SomeTemplate { /* ... */ };
Obj<SomeTemplate> foo;
在上面,foo
将是一个Obj<SomeTemplate>
有两个成员:
SomeTemplate< int> m1
SomeTemplate<float> m2
这也应该适用于 C++98。这是作为模板参数的模板。我的意思是模板类将作为 F 的参数。也许这个页面会帮助你:http ://www.cprogramming.com/tutorial/templates.html