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

Template Template Parameters in the C++ Standard Library?

本文关键字:参数 标准 C++      更新时间:2023-10-16

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

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

如果C++版本很重要,那么最好是C++14/C++1y的最新草案。

我不知道C++标准库中有任何模板被指定接受模板模板参数,但C++11中至少有一个标准模板具有带有模板模板参数的部分专用化std::pointer_traitsstd::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;
    };