在Java泛型中,当我想确保某些泛型类的类型必须继承一个类时,我可以编写如下代码:
public class MyHandler<T extends Serializable> {}这意味着T必须扩展/实现类/接口Serializable,否则编译器将生成错误。
如何在C++11中获得相同的东西?我的意思是,如果我将C++11编码如下:
template<typename T>
class MyHandler {}在这段代码中,T可以是任何类。但是,如果我想告诉类用户T必须继承类boost::archive::text_oarchive (就像boost::archive::text_oarchive中的<T extends Serializable> ),我能做什么呢?
发布于 2020-07-21 03:23:42
您可以使用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 {};https://stackoverflow.com/questions/63006828
复制相似问题