C++ 模板默认参数
如何将模板类指定为模板typename的默认值?e、 g.以下情况不起作用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()
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
{};