Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以使用比模板中更少的参数来声明类模板吗?_C++_Templates - Fatal编程技术网

C++ 我们可以使用比模板中更少的参数来声明类模板吗?

C++ 我们可以使用比模板中更少的参数来声明类模板吗?,c++,templates,C++,Templates,map的类模板如下所示 template < class Key, // map::key_type class T, // map::mapped_type class Compare = less<Key>, // map::key_compare

map的类模板如下所示

template < class Key,                                     // map::key_type
       class T,                                       // map::mapped_type
       class Compare = less<Key>,                     // map::key_compare
       class Alloc = allocator<pair<const Key,T> >    // map::allocator_type
       > class map;
template类图;
从模板上看,它似乎有4个模板参数,但在声明映射时,我只看到两个模板参数

map <int, int> table;
map表;
这不是问题吗?如果不是,那么只定义最后两个(四个)的类型是否正确

map
这不是问题吗

不,这就是默认类型定义的用途:
=less
=allocator

如您所见,这些类型可以从
Key
T
中推断出来

如果不是,那么只定义最后两个(四个)的类型是否正确<代码>地图

不,那不行

  • 这不是问题吗
  • 这不是问题,是问题

    默认模板参数在=符号后的参数列表中指定

    这意味着当您没有指定它们时,例如
    map
    ,将使用默认参数。i、 e.
    Compare
    less
    ,而
    Alloc
    alloctor

  • 仅定义最后两个(四个)的类型是否正确?地图
  • 否。使用默认参数代替缺少的尾随参数。不能只指定最后两个参数,而不指定前两个参数并希望应用默认参数。在这种情况下,前两个参数根本没有默认参数

    顺便说一句

    如果为主类模板的模板参数指定了默认值,则每个后续模板参数都必须有一个默认参数,但最后一个参数可能是模板参数包


    这是模板的默认参数

    但最后只能有一个或多个参数是默认参数(即,一旦存在默认参数,该参数之后的所有参数都必须是默认参数。)

    因此,您的代码如下所示:

    map

    这将是错误的

    正确的代码如下所示:

    map

    注:你可以参考思维。in .C++,第二版。卷2。
    map<,,int,int>