模版之编译期断言

2023-11-05


title: 模版之编译期断言
date: 2023-02-20 20:28:08
permalink: /pages/83d2a5/
categories:


模板之编译期断言

assert是在运行期的断言,会导致abort,很少被使用,我们可以利用模板实现编译期的断言。

在《Modern C++ Design》中介绍了利用大小为0的数组是非法的,也就是char unamed[0];但是事实上这需要编译选项(-pedantic-Wzero-length-array)支持,因为C/C++是支持这个用法的,用于变长结构体。

简单介绍一下利用这个特性是怎么做编译期断言的。代码如下:

#define Check(expr)                  \
    {                                \
        char unamed[(expr) ? 1 : 0]; \
        (void)(unamed);              \
    }

接下来我们利用模板来实现。这里需要用到std::enable_if(C++11起),它的实现也比较简单,利用了模板的偏特化,只能实例化enable_if<true, T>

template<bool B, class T = void>
struct enable_if {};
 
template<class T>
struct enable_if<true, T> { typedef T type; };

我们利用这个特点实现编译期断言。代码如下:

#define Check(expr)                                           \
    {                                                         \
        typename std::enable_if<(expr), void>::type unamed(); \
    }

如果是C++14就更简洁一点。

#define Check(expr)                              \
    {                                            \
        std::enable_if_t<(expr), void> unamed(); \
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模版之编译期断言 的相关文章

  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 处理右值时的 insert 与 emplace

    std string myString std unordered set
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐

  • 3D游戏设计作业9:游戏智能

    坦克对战游戏 AI 设计 游戏截图 1 作业要求 从商店下载游戏 Kawaii Tank 或 其他坦克模型 构建 AI 对战坦克 具体要求 使用 感知 思考 行为 模型 建模 AI 坦克 场景中要放置一些障碍阻挡对手视线 坦克需要放置一个矩
  • python 点名程序(随机点名不重复 可定义名字列表 语音播报 免费下载 多线程打包)

    python点名小程序 含有 调用windows本地语音播报 python多线程打包 等小技巧 软件获取 点击下方地址直接下载压缩包 免费为大家提供 软件获取地址 大家拿了软件别忘了给博主一个免费的赞 谢谢 解压压缩包 里面的MyAPP e
  • 配置和美化Arch Linux

    前面说了如何安装一个最小化的Arch Linux 现在来说说如何配置 配置网络 如果使用有线网络的话 将dhcp服务开机启动 systemctl enable dhcpcd 如果使用无线网络的话 使用wifi menu命令连接网络 如果在使
  • Base64图片上传

    文章目录 1 图片上传样式写法 2 Js写法 1 图片上传样式写法 div class form group div
  • python+OpenCV图像处理(五)图像的阈值分割

    图像的阈值处理 一幅图像包括目标物体 背景还有噪声 要想从多值的数字图像中直接提取出目标物体 常用的方法就是设定一个阈值T 用T将图像的数据分成两部分 大于T的像素群和小于T的像素群 这是研究灰度变换的最特殊的方法 称为图像的二值化 Bin
  • 分号与逗号的区别及举例_顿号与逗号与分号间的区别是什么?

    逗号把句子切分为意群 表示小于分号大于顿号的停顿 而逗号有哪些用法呢 以下是由小编整理关于逗号如何使用的内容 希望大家喜欢 逗号汉语用法句子内部主语与谓语之间如需停顿 用逗号 例如 我们看得见的星星 绝大多数是恒星 句子内部动词与宾语之间如
  • STM32设置为I2C从机模式

    STM32设置为I2C从机模式 目录 STM32设置为I2C从机模式 前言 1 硬件连接 2 软件编程 3 运行测试 3 1 I2C连续写入 3 2 I2C连续读取 3 3 I2C单次读写测试 4 总结 前言 STM32的I2C作为主机的情
  • pentaho安装

    注意 以下图片文字中的org mysql一律改为com mysql 1 pentaho社区版下载地址 https sourceforge net projects pentaho 2 下载以下两个文件 3 biserver ce 6 1 0
  • JMeter 设置请求头信息的详细步骤

    在使用 JMeter 的过程中 我们会遇到需要设置请求头信息的场景 比如 POST 传过去的 Body 数据是 json 格式的 需要填添加头信息 Content Type application json 在 header 中用 toke
  • python中错误Reshape your data either using array.reshape(-1, 1)

    1 错误 Traceback most recent call last File Users yuanbao PycharmProjects EnsembleLearning KNeighbors py line 16 in
  • 数据控制类别(CC1和CC2)——DO-178B/ED-12B学习笔记之七

    数据控制类别 CC1和CC2 DO 178B ED 12B学习笔记之七 为了理解数据控制类别 CC1和CC2 的定义 先看DO 178B的7 3条 原文 Software life cycle data can be assigned to
  • NUC980开源项目27-you should not run configure as root

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • Shiro实战学习笔记(2)-自定义Realm

    1 自定义realm package org tzb realm import org apache shiro authc AuthenticationException import org apache shiro authc Aut
  • float32精度_模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo...

    鱼羊 发自 凹非寺 量子位 报道 公众号 QbitAI TensorFlow模型优化工具包又添一员大将 训练后的半精度浮点量化 float16 quantization 工具 有了它 就能在几乎不损失模型精度的情况下 将模型压缩至一半大小
  • 无监督学习K-means文本聚类实践

    无监督学习 Unsupervised Learning 希望能够发现数据本身的规律和模式 与有监督学习相比 无监督不需要对数据进行标记 这样可以节约大量的人力物力成本 某种程度上说 机器学习的终极目标就是无监督学习 从功能上看 无监督学习可
  • C++中对ODBC的API详解和使用

    本文构成 定义 API 实例 实例在最下面 一 ODBC 1 定义 即开放数据库连接 Open Database Connectivity ODBC 是数据库API的规范 该API独立于任何一个DBMS或操作系统 是为解决异构数据库间的数据
  • iptables Permission denied (you must be root)

    环境 Docker容器 操作 iptables L 现象 iptables v版本 can t initialize iptables table filter Permission denied you must be root 原因 i
  • 【PyTorch】冻结网络参数

    方法一 将需要固定的那部分参数的requires grad置为False 在优化器中加入filter根据requires grad进行过滤 requires grad置为False for p in net XXX parameters p
  • python开发面试刷题指南

    1 装饰器 详解Python的装饰器 装饰器的作用就是给原有函数或对象添加额外的功能 不需要变动原有代码 用于有切面需求的场景 如插入日志 性能测试等产经 返回值是一个函数对象 优点 抽离出函数功能本身无关的雷同代码 可以重用 缺点 经过装
  • 模版之编译期断言

    title 模版之编译期断言 date 2023 02 20 20 28 08 permalink pages 83d2a5 categories 通用领域 编程语言 C tags C 元编程 author name zhengzhibin