具有默认类的模板参数列表

时间:2019-08-04 05:37:49

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

有人举过 2 3 的例子吗?我尝试了解该标准的写作风格以及有关C ++的其他文档。具体来说,这里是模板文档。

两者都可能是错误的,但是我试图理解它们之间的差异。来源:https://en.cppreference.com/w/cpp/language/template_parameters

  

模板<参数列表>类型名(C ++ 17)|类名(可选)(1)

     

模板<参数列表>类型名(C ++ 17)|类名(可选)=   默认(2)

     

模板<参数列表>类型名(C ++ 17)|类...   名称(可选)(3)(自C ++ 11起)

     

1)带有可选名称的模板模板参数。

     

2)带有可选名称和默认名称的模板模板参数。

     

3)带有可选名称的模板模板参数包。

我不确定我是否正确解释了这一点。据我了解...

// 2
template <typename T, typename Y> class Foo = default; // this can't be right, can it?

// 3
template <typename T, typename Y> class ... Foo;

1 个答案:

答案 0 :(得分:1)

您引用的页面有一个示例(2):

template<
    typename K,
    typename V,
    template<typename> typename C = my_array // C is a template template parameter
>
class Map
{
    C<K> key;
    C<V> value;
};

(我重新格式化了代码以添加评论。)

请注意,以上示例中的KV都不是模板模板参数。

表格(3)如下:

template<template<typename> typename... Args> // Args is a template template parameter pack
struct TPL {};

请注意,模板模板参数是一个怪兽。通常,您只需要类型模板参数(如您的示例)和非类型模板参数。 cppreference页上有详细的说明。