3

我刚刚开始学习 C++11,但我从未在新功能列表中看到过这种语法:

template <template <typename> class F>
struct fun;

它是什么以及它是如何工作的?

4

2 回答 2

3

注意:您正在查看的是“旧”功能,并且早在 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>有两个成员:

  1. SomeTemplate< int> m1
  2. SomeTemplate<float> m2
于 2014-03-16T20:46:25.700 回答
2

这也应该适用于 C++98。这是作为模板参数的模板。我的意思是模板类将作为 F 的参数。也许这个页面会帮助你:http ://www.cprogramming.com/tutorial/templates.html

于 2014-03-16T20:45:34.483 回答