c++ - C++模板模板参数的语法

标签 c++ templates syntax

我很难理解 C++ 模板模板参数的语法。根据出色的描述 here,我理解它们为什么有用,我只是觉得他们的语法很难理解。上面网站的两个例子(还有其他的):

template <typename T, template <typename> class Cont>
class Stack;

template <template <typename,typename> class Cont>
class Wrapper3;

如果不了解此语法背后的基本原理,显然不可能概括此类声明。内存更难,而且似乎没有太大帮助。

编辑: 我意识到我对一个问题的尝试就像观察一样。我要的是有关如何在日常对话中解释模板模板参数语法的帮助。我可以使用 C++ 语法和我学过的所有其他编程语言来做到这一点。但是,我很难向自己“解释”C++ 模板模板参数的语法。我得到了一本书,“C++ 模板:完整指南”,作者是 David Vandevoorde 和 Nicolai M. Josuttis,虽然它是一本不错的书,但它对我理解这种语法没有多大帮助,我敢肯定许多人会同意充其量只是古怪。

最佳答案

我不确定你的问题到底是什么,但这里是对你给出的两个例子的解释。

template <typename T, template <typename> class Cont>
class Stack;

Stack是一个有两个模板参数的类模板。第一个参数,T可以是任何类型(包括内置类型、用户定义类型、模板实例化等)。第二个参数,Cont , 必须是一个带一个参数的类模板。该参数未命名,因为它没有多大意义(该参数从不绑定(bind)到任何东西)。

template <template <typename,typename> class Cont>
class Wrapper3;

Wrapper3是一个带有单个参数的类模板,Cont . Cont必须是带有两个参数的类模板。

定义模板模板参数的语法与定义类模板 ( template <typename [param1], typename [param2], ...> class Name ) 的语法相同,所以我不太明白你的问题是什么。

但是,我同意当您开始“嵌套”模板模板参数时语法会变得有点笨拙:

// class template whose parameter must be a class template whose parameter
// must be a class template
template <template <template <typename> class > class C >
struct Wow {};

但这种情况并不经常发生......

关于c++ - C++模板模板参数的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282971/

相关文章:

android - 原始 MIDI 值和字节 C++

c++ - Visual Studio 中的语法检查 (C++)?

node.js - Linux 上的 Node 语法错误,但不是窗口

C++ - 模板函数调用运算符重载 - 错误 C2064

templates - polymer 模板 : What are valid selects for content insertion points

linux - 意外标记附近的语法错误

python - if_else条件下的Python语法错误-为什么会发生这种情况?

c++ - 如何不出错地除以零

c++ - 使用范围变量的 lambda 表达式 - 安全吗?

c++ - 我继承自 std::iterator,但编译器无法识别 'pointer' 或 'reference'