java问号 泛型_如何在Java中将“问号(?)”类型泛型模拟为C++?

在C++中,所有类型参数都必须具有名称,无论您是否使用它,因此没有问号。只需将它作为函数的模板参数并给它一个名称,你应该没问题。

template

struct templ {

template

void assign( templ & u ); // public void assign>( temple u )

};这是微不足道的部分,更复杂的部分是对类型强制执行约束,为此您可以使用SFINAE:

template

struct templ {

template

typename std::is_base_of::value

>::type >

void super( templ & u ); // public void super_ super T>( templ> u )

template

typename std::is_base_of::value

>::type >

void extends( templ & u ); // public void extends_ extends T>( templ> u )

}那就是使用C++ 11作为SFINAE,在C++ 03中,它有点复杂(好像这个版本很简单)因为你不能在函数模板参数上使用SFINAE,所以SFINAE需要应用于返回类型或额外函数参数。 SFINAE是一个功能更强大的解决方案,它不仅可用于提供super和extends,还可用于其他许多类型或编译时间值的功能。谷歌为SFINAE,你会发现很多SFINAE使用的案例,其中许多将是C++ 03风格。

有一个概念的提议可以大大简化语法,但没有达成协议,并且为了推动标准的完成,它被推迟到以后的标准。

现在,这在C++中并不像在Java中那么常见,所以我建议您提供一个与您想要做的事情不同的问题,并且您将在更惯用的C++中获得设计的想法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值