C++标准库中的哪些模板(如果有)具有一个或多个模板模板参数?C++标准库中的模板模板参数?
如果有很多,那么几个例子是好的。
如果C++版本很重要,那么C++ 14/C++ 1y的最新草案会被优先考虑。
C++标准库中的哪些模板(如果有)具有一个或多个模板模板参数?C++标准库中的模板模板参数?
如果有很多,那么几个例子是好的。
如果C++版本很重要,那么C++ 14/C++ 1y的最新草案会被优先考虑。
我不知道C++标准库中的任何模板被指定为模板模板参数,但在C++ 11中至少有一个标准模板,其中部分专用带有模板模板参数:std::pointer_traits
。 std::pointer_traits<Ptr>::element_type
被指定为:
Ptr::element_type
如果存在这样的类型;否则,T
如果Ptr
是SomePointer<T, Args>
形式的类模板实例化,其中Args
是零个或多个类型参数;否则, 专业化是格式不正确。
为了实现这个,你需要一个SomePointer
的模板模板参数,因为它可以是一个任意的类模板(只要它只有类型模板参数)。下面是libstdC++ helper类的部分专业化,例如:
template<template<typename, typename...> class _SomePtr, typename _Tp,
typename... _Args>
struct __ptrtr_elt_type<_SomePtr<_Tp, _Args...>, false>
{
typedef _Tp __type;
};
严格地说,一个实现必须符合描述的行为,在这种情况下,它没有明确提到部分专业化。他们可以这样做,以便他们可以例如选择执行磁铁。在任何一种情况下,用户都不能检测是否存在这种专业化。 – 2014-08-29 01:18:22
某些容器模板具有模板构造函数。 – GingerPlusPlus 2014-08-28 22:01:10
@GingerPlusPlus:构造函数模板不是模板模板参数。 – 2014-08-28 22:01:59
我认为STL中没有模板模板参数模板。因为这会打破'Containers <->迭代器<->算法'的哲学。 – 101010 2014-08-28 22:05:00