c++模板语法模板参数
Syntax of C++ Template Template Parameters
我很难理解c++模板模板参数的语法。我理解它们为什么有用,就像这里优秀的描述一样,我只是发现它们的语法很难理解。上面网站上的两个例子(还有其他的):
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
必须是一个只有一个参数的类模板。参数是未命名的,因为它没有多大意义(参数永远不会绑定到任何东西)。
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 {};
没有什么神秘的。只需从原始模板中取出模板参数:
template <typename> class Cont
任何具有单个类型参数的类模板都适合,例如
template <typename T>
class A {
public:
A(T t) : t_(t) {}
T get() { return t_; }
private:
T t_;
};
你会使用你的原始模板
Stack<int, A> s;
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 将类作为主要参数的语法在哪里需要?
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 当C++类函数参数之一是结构时,它们的语法有什么不同
- 将显式指定的函数模板重载作为模板参数传递的正确语法是什么?
- 提升::精神::qi::语法和可变参数模板
- C++ 中的默认参数语法和一般语法
- 带有约束的可变参数模板的'requires'表达式的语法是什么?
- C++ C 样式数组作为语法错误的参数
- 使用 MATLAB 语法的 c++ 函数参数?
- 在模板类中的参数包的语法
- 将QMETAMETHOD作为参数传递到使用新的Qobject :: Connect语法的函数
- 在Qt信号和插槽中使用lambda语法并访问传递的参数
- 是否可以在尾随返回类型语法中直接使用参数值(不是其类型,而是值本身)
- 精神语法不会编译:函数模板参数错误?
- 适用于全局模板运算符指定模板参数的适当语法
- hpp文件中的块,这是c ++语法吗?为什么没有传入参数?有人可以解释一下,请
- 有人能解释一下特殊的std::函数模板参数列表语法(这个奇怪的类型(Types..))吗
- 构件和模板参数语法上的指针
- 可变模板模板参数语法