微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

模板默认参数

如何解决模板默认参数

如何将模板类指定为模板类型名的认值?例如以下不起作用。

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

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

int main()
{
    Y<> y;
    return 0;
} 
tmp.cc:4:22: error: expected type-specifier before ‘template’
 template <typename T=template <typename,typename> class X> class Y {};
                      ^~~~~~~~
tmp.cc:4:22: error: expected ‘>’ before ‘template’
tmp.cc: In function ‘int main()’:
tmp.cc:8:7: error: template argument 1 is invalid
     Y<> y;
       ^

解决方法

您的代码的问题在于,对于 Y,您要求一个 type 模板参数,而您想要使用一个 template 模板参数。

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;
} 

如果要使用X作为默认值,T必须是模板模板,所以

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
 {};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。