C ++标准库中的模板模板参数?

时间:2014-08-28 21:59:32

标签: c++ c++11 c++14

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

如果有很多,那么可以举几个例子。

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

1 个答案:

答案 0 :(得分:8)

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

  

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