有人举过 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;
答案 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;
};
(我重新格式化了代码以添加评论。)
请注意,以上示例中的K
和V
都不是模板模板参数。
表格(3)如下:
template<template<typename> typename... Args> // Args is a template template parameter pack
struct TPL {};
请注意,模板模板参数是一个怪兽。通常,您只需要类型模板参数(如您的示例)和非类型模板参数。 cppreference页上有详细的说明。