C ++标准库中的哪些模板(如果有)具有一个或多个模板模板参数?
如果有很多,那么可以举几个例子。
如果C ++版本很重要,那么最新的C ++ 14 / C ++ 1y草案就会得到优先考虑。
答案 0 :(得分:8)
我不知道C ++标准库中指定采用模板模板参数的任何模板,但C ++ 11中至少有一个标准模板具有部分特化使用模板模板参数:std::pointer_traits
。 std::pointer_traits<Ptr>::element_type
被指定为:
Ptr::element_type
如果存在这样的类型;否则,T
如果Ptr
是SomePointer<T, Args>
形式的类模板实例,其中Args
是零个或多个类型参数;否则, 专业化是不正确的。
为了实现这一点,你需要SomePointer
的模板模板参数,因为它可以是一个任意的类模板(只要它只有类型模板参数,确切地说)。这是执行此操作的libstdc ++帮助程序类部分特化,例如:
template<template<typename, typename...> class _SomePtr, typename _Tp,
typename... _Args>
struct __ptrtr_elt_type<_SomePtr<_Tp, _Args...>, false>
{
typedef _Tp __type;
};