在Java泛型中,当我想确保某个泛型类的类型必须继承一个类时,我可以这样编码:
public class MyHandler<T extends Serializable> {}
这意味着T
必须扩展/实现类/接口Serializable
,否则编译器会产生错误。
如何在 C++11 中得到同样的东西?我的意思是,如果我将 C++11 编码如下:
template<typename T>
class MyHandler {}
在这段代码中,T
可以是任何类。但是,如果我想告诉T
必须继承该类的类用户boost::archive::text_oarchive
(就像<T extends Serializable>
在 Java 中一样),我该怎么办?
您可以std::is_base_of
用于检查。
template<typename T>
class MyHandler {
static_assert(std::is_base_of<boost::archive::text_oarchive, T>::value, "T must inherit boost::archive::text_oarchive");
};
由于 C++20 我们可以使用约束,例如
template<typename T> requires std::is_base_of_v<boost::archive::text_oarchive, T>
class MyHandler {};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句