C++11模板:如何保证类型继承类?

伊夫

在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 中一样),我该怎么办?

songyuanyao

您可以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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章