gpt4 book ai didi

C++11 模板 : How to ensure that the type inherits a class?

转载 作者:行者123 更新时间:2023-12-01 14:42:24 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to force template <class> to be derived from BaseClassA?

(3 个回答)


1年前关闭。




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

public class MyHandler<T extends Serializable> {}
这意味着 T必须扩展/实现类/接口(interface) Serializable ,否则编译器会报错。
如何在 C++11 中得到同样的东西?我的意思是,如果我将 C++11 编码如下:
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");
};

从 C++20 开始,我们可以使用 constraint ,例如
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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com