在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++中获得设计的想法。