c++ - 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 中一样),我该怎么办?
解决方案
您可以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 {};
推荐阅读
- django - 将 Python 应用部署到 Windows Server 上的 Azure 应用服务
- node.js - (discord.js) 为作者添加角色
- ruby-on-rails - 有没有办法在 Rails 中编写 HTML 表单?
- cassandra - 使用 Cassandra 进行排序
- python - 我不明白为什么我的 super() 会产生错误
- elasticsearch - 尝试构建同义词过滤器时收到“无法构建同义词”消息
- git - 如何忽略特定文件之外的所有文件(不要忽略)
- java - 如何获取包含的 FXML 的控制器?
- angular - Angular 7 ngx-intl-tel-input onBlur() 事件有什么解决方案吗?
- php - 有什么方法可以修复此代码以避免错误:每次为键 'PRIMARY' 重复条目 '1'