c++ - 如何根据模板类型的祖先限制类的实例化
问题描述
我有一个模板类XX
,并希望将其实例化限制为仅T
属于另一个类的后代的类型ZZ
:
class ZZ {
public:
int transmorgificationFactor;
};
template <typename T>
class XX {
public:
static_assert(std::is_base_of<ZZ, T>, "T must be a ZZ");
T foo;
// ...
};
使用 Visual Studio 2019 C++ (ISO C++17) 我得到
错误 C2275: 'std::is_base_of<ZZ, T>': 非法将此类型用作表达式
这不是正确的使用方法std::is_base_of<>
吗?
解决方案
std::is_base_of
是一种类型,不能用作 中的条件static_assert
。您正在寻找的是std::is_base_of_v
:
static_assert(std::is_base_of_v<ZZ, T>, "T must be a ZZ");
// ^^
或 C++17 之前的版本,您可以执行以下操作:
static_assert(std::is_base_of<ZZ, T>::value, "T must be a ZZ");
// ^^^^^^^
推荐阅读
- c - GDB 不允许我读取 argv 内存段
- c# - 从列表框中获取多项选择
- ruby - 尝试使用 chromedriver 运行测试的问题
- html - Bootstrap 4 手风琴在角度 4 中导航
- javascript - 根据php ci中的指定值绘制自定义形状和填充颜色
- laravel - 使用 laravel-snappy 生成空白内容 PDF
- postgresql - 从属中的 Postgres 复制 .done 文件
- azure - 如何将托管在云上的 MySQL 数据库连接到 Azure 数据工厂?
- c# - 如何使用 c# 进行多个浏览器操作?
- javascript - 在表追加行 Select2 不处理事件