如何将给定的模板专门化为模板

How to specialize a given template for a template

本文关键字:专门化      更新时间:2023-10-16

是否可以将此模板专门用于任何basic_string?

template<class T> struct X {};

由于basic_string本身就是一个模板,我知道这将是一个解决方案:

template <template <class, class, class> class T> struct X {}; template <> struct X<basic_string> {};

然而,我想知道该语言是否允许保留第一个模板定义,通过某种方式将其专门用于basic_string。

是:

#include <string>
template <typename> struct X;
template <typename TChar, typename TTraits, typename TAlloc>
struct X<std::basic_string<TChar, TTraits, TAlloc>>
{
    // ...
};

主模板采用一个类型参数,因此每个专业化都必须以某种方式为X提供一个类型参数。