首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11模板:如何确保类型继承类?

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

Stack Overflow用户
提问于 2020-07-21 03:21:02
回答 1查看 157关注 0票数 2

在Java泛型中,当我想确保某些泛型类的类型必须继承一个类时,我可以编写如下代码:

代码语言:javascript
复制
public class MyHandler<T extends Serializable> {}

这意味着T必须扩展/实现类/接口Serializable,否则编译器将生成错误。

如何在C++11中获得相同的东西?我的意思是,如果我将C++11编码如下:

代码语言:javascript
复制
template<typename T>
class MyHandler {}

在这段代码中,T可以是任何类。但是,如果我想告诉类用户T必须继承类boost::archive::text_oarchive (就像boost::archive::text_oarchive中的<T extends Serializable> ),我能做什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-21 03:23:42

您可以使用std::is_base_of进行检查。

代码语言:javascript
复制
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,我们可以使用约束

代码语言:javascript
复制
template<typename T> requires std::is_base_of_v<boost::archive::text_oarchive, T>
class MyHandler {};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63006828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档