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

And*_*zos 8 c++ c++11 c++14

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

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

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

Bri*_*ian 8

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

Ptr::element_type如果存在这样的类型; 否则,Tif 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;
    };
Run Code Online (Sandbox Code Playgroud)

  • 严格地说,实现必须符合所描述的行为,在这种情况下,没有明确提到部分特化.他们可以这样做,所以他们可以选择执行魔术.在任何一种情况下,都不允许用户检测是否存在这种专业化. (3认同)