Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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

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_Template Templates_Default Template Argument - Fatal编程技术网

C++ 模板默认参数

C++ 模板默认参数,c++,templates,template-templates,default-template-argument,C++,Templates,Template Templates,Default Template Argument,如何将模板类指定为模板typename的默认值?e、 g.以下情况不起作用 template <typename A, typename B> class X {}; template <typename T=template <typename, typename> class X> class Y {}; int main() { Y<> y; return 0; } 模板类X{}; 模板类Y{}; int main()

如何将模板类指定为模板typename的默认值?e、 g.以下情况不起作用

template <typename A, typename B> class X {};

template <typename T=template <typename, typename> class X> class Y {};

int main()
{
    Y<> y;
    return 0;
} 
模板类X{};
模板类Y{};
int main()
{
Y;
返回0;
} 
tmp.cc:4:22:错误:在“模板”之前需要类型说明符
模板类Y{};
^~~~~~~~
tmp.cc:4:22:错误:在“模板”之前应为“>”
tmp.cc:在函数“int main()”中:
tmp.cc:8:7:错误:模板参数1无效
Y;
^

您的代码的问题是,对于
Y
您要求类型模板参数,并且您想要使用模板模板参数

template <typename A, typename B> class X {};

//           type                template template
//........VVVVVVVVVV VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
template <typename T=template <typename, typename> class X> class Y {};

int main()
{
    Y<> y;
    return 0;
} 
或者也可以使用变量来提高灵活性

template <template <typename...> class T = X>
class Y
 {};
模板
Y类
{};

如果
X
是一种类型,那么它就是
typename T=X
。但它不是一个,它是一个模板。即使删除默认参数并执行
Y
,它也不会编译。
t
应该是一个类型名,但
X
是一个类模板,而不是一个类。更改它,使
Y
的参数是模板而不是类型名,或者将默认值更改为类而不是类模板。在不知道
X
Y
实际应该是什么的情况下,很难说是什么。如果它起了作用,那么当您尝试这样实例化它时,
X
的模板参数
A
B
应该是什么:
Y?这可能是一个。。。字面上
template <typename, typename>
class X
 {};

template <template <typename, typename> class T = X>
class Y
 {};

int main ()
 {
   Y<> y;
 } 
template <template <typename...> class T = X>
class Y
 {};