作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
How to force template <class> to be derived from BaseClassA?
(3 个回答)
1年前关闭。
在Java泛型中,当我想确保某个泛型类的类型必须继承一个类时,我可以编写如下代码:
public class MyHandler<T extends Serializable> {}
这意味着
T
必须扩展/实现类/接口(interface)
Serializable
,否则编译器会报错。
template<typename T>
class MyHandler {}
在这段代码中,
T
可以是任何类。但是,如果我想告诉类(class)用户
T
必须继承类
boost::archive::text_oarchive
(就像 Java 中的
<T extends Serializable>
),我能做什么?
最佳答案
您可以使用 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");
};
template<typename T> requires std::is_base_of_v<boost::archive::text_oarchive, T>
class MyHandler {};
关于C++11 模板 : How to ensure that the type inherits a class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63006828/
我是一名优秀的程序员,十分优秀!