C++标准库中的模板模板参数
Template Template Parameters in the C++ Standard Library?
C++标准库中的哪些模板(如果有的话)有一个或多个模板模板参数?
如果有很多,那么举几个例子就可以了。
如果C++版本很重要,那么最好是C++14/C++1y的最新草案。
我不知道C++标准库中有任何模板被指定接受模板模板参数,但C++11中至少有一个标准模板具有带有模板模板参数的部分专用化:std::pointer_traits
。std::pointer_traits<Ptr>::element_type
被指定为:
Ptr::element_type
,如果存在这样的类型;否则,如果Ptr
是形式SomePointer<T, Args>
的类模板实例化,则为T
,其中Args
是零个或多个类型参数;否则专业化是不正规的。
为了实现这一点,您需要SomePointer
的模板模板参数,因为它可以是任意的类模板(准确地说,只要它只有类型模板参数)。以下是执行此操作的libstdc++帮助程序类部分专用化,例如:
template<template<typename, typename...> class _SomePtr, typename _Tp,
typename... _Args>
struct __ptrtr_elt_type<_SomePtr<_Tp, _Args...>, false>
{
typedef _Tp __type;
};
相关文章:
- 标准::向量声明中使用的模板参数
- 如何使用模板化标准::函数作为参数?
- 标准::enable_if 和标准::is_arithmetic 作为模板参数的问题
- 多维标准::数组的可变参数模板
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 参数归纳与标准::变体
- 可变参数模板和标准::函数
- 从常量字符*、字符*参数到标准::字符串的直接转换接口
- 标准::原子::compare_exchange与两个memory_order参数一起使用的真实示例
- 标准是否阻止在可变参数模板中使用足够小的文本值缩小文本转换范围
- 标准::basic_ostream参数
- 删除 Netbeans 中的标准运行参数
- C++11:标准::result_of<>模板参数与标准::函数<>
- 为什么 C++17 标准没有带来部分类模板参数扣除?
- 依赖的非类型参数包:标准怎么说?
- 为什么使用标准类型作为模板参数?
- 为什么C++标准中没有 std::basic_string 类的构造函数,其参数类型为 std::string_view
- C++标准是否保证失败的插入到关联容器中不会修改 rvalue-reference 参数?
- 可变参数列表vs单一模板参数:标准怎么说?