2014-08-28 55 views
7

C++标准库中的哪些模板(如果有)具有一个或多个模板模板参数?C++标准库中的模板模板参数?

如果有很多,那么几个例子是好的。

如果C++版本很重要,那么C++ 14/C++ 1y的最新草案会被优先考虑。

+0

某些容器模板具有模板构造函数。 – GingerPlusPlus 2014-08-28 22:01:10

+7

@GingerPlusPlus:构造函数模板不是模板模板参数。 – 2014-08-28 22:01:59

+0

我认为STL中没有模板模板参数模板。因为这会打破'Containers <->迭代器<->算法'的哲学。 – 101010 2014-08-28 22:05:00

回答

7

我不知道C++标准库中的任何模板被指定为模板模板参数,但在C++ 11中至少有一个标准模板,其中部分专用带有模板模板参数:std::pointer_traitsstd::pointer_traits<Ptr>::element_type被指定为:

Ptr::element_type如果存在这样的类型;否则,T如果PtrSomePointer<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; 
    }; 
+3

严格地说,一个实现必须符合描述的行为,在这种情况下,它没有明确提到部分专业化。他们可以这样做,以便他们可以例如选择执行磁铁。在任何一种情况下,用户都不能检测是否存在这种专业化。 – 2014-08-29 01:18:22