禁止带有 `static_assert` 的函数

2023-12-02

我想阻止某些函数被调用。让我们忽略通过函数指针或其他东西调用函数的情况,只关注直接函数调用的情况。我可以这样做= delete。然而,发布的诊断信息并不丰富。我考虑过使用static_assert,您可以使用它提供自定义诊断消息。我放置了一个static_assert(false, ...)函数体内的语句,希望在调用函数时触发它。然而,事实证明,static_assert即使未调用该函数也会失败。有什么建议么?

附加说明:该功能被无条件禁止。所以,std::enable_if不适用于此处。这样一个函数的动机是我想防止某些使用,否则可以通过重载解析很好地编译。所以我不能只是删除这个功能。deprecated这不是我想要的。我想要一个编译错误,而不是警告。


我同意其他人的观点,你不应该使用static_assert为此,请将函数标记为已弃用。

static_assert离子在编译时就会激发。对于普通函数来说,这是解析它的时间,而不是调用它的时间。为一个template然而,这是实例化的时间。所以你可以让你的功能template像这样。

template <typename...>
struct always_false { static constexpr bool value = false; };

template <typename... Ts>
void
never_call_me(Ts&&...)
{
  static_assert(always_false<Ts...>::value,
                "You should have never called this function!");
}

If typename...不适合您(因为该函数已重载),请尝试缩小范围以仅匹配您想要出错的内容。

这里使用的技巧是always_false<Ts...>::value取决于类型参数Ts...因此无法对其进行评估,直到template被实例化。 (尽管我们可以清楚地看到它永远是false.)

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

禁止带有 `static_assert` 的函数 的相关文章

随机推荐

  • 确定哪个键盘正在发送击键

    我的机器上连接了 2 个键盘 一个在 PS 2 上 另一个在 USB 上 在 C 中 如何确定哪个键盘正在发送击键 这是一个示例 非常脏的代码 展示了如何使用 NET 中的 Windows 输入挂钩 与代码片段编译器配合使用效果最佳 gt
  • onSaveInstanceState 不起作用

    我知道这个问题已经被问了很多次 但我不明白为什么 onSaveInstanceState 不适合我 这可能是一些愚蠢的事情 但我希望你们中的一些人可以在这里帮助我 无论如何 这是我的代码 public class Main extends
  • Eclipse WebLogic 调试

    我知道您只需单击 Eclipse 中的调试图标即可进行调试 是否可以从命令行启动 WebLogic 并进行调试并继续进行调试 当我这样做时 在服务器下的 Eclipse 中 我看到状态是 已启动 而不是 调试 难道只能通过设置远程调试来实现
  • 为什么当 bash 被称为 sh 时,它的行为会有所不同?

    我有一台 ubuntu 机器 默认 shell 设置为 bash 并且可以通过两种方式访问 PATH 中的二进制文件 which bash bin bash which sh bin sh ll bin sh lrwxrwxrwx 1 ro
  • 如何比较GDKEvent时间戳与当前时间?

    如何在c 中使用GDKEvent的时间戳 例如 我将其打印为 unsigned int 其值为 4194719109 但当前时间是 1395764110 这是从 time h 的 time 获取的 g get real time 的当前时间
  • 如何部署SQL Server Compact Edition 4.0?

    我如何部署微软 SQL Server Compact 4 0 SQL Server Compact Edition 当前版本为 4 0 是 一个免费的嵌入式数据库 软件开发人员可以使用它来构建 Windows 桌面应用程序 它占用空间小 并
  • 在文本区域中搜索单词

    我正在构建一个自定义的find and replace在java中 我浏览一个文本文件并将内容加载到文本区域中 现在我有一个文本框 我在其中输入需要搜索的文本 搜索文本的最佳方式是什么 我知道一种使用方法string indexOf 但我还
  • 如何从 GLM 输出中获取概率

    我现在非常困惑 因为我试图找出如何计算我的概率glmR 中的输出 我知道数据非常微不足道 但我真的很想知道如何从这样的输出中获取概率 我本来想尝试一下inv logit 但不知道括号内要放什么变量 数据来自占用研究 我正在评估毛发陷阱法与相
  • 从 numpy 数组创建 pandas DataFrame 会导致奇怪的错误

    缺点是 当我尝试从函数 numpy 数组创建 DataFrame 时 它 们会抛出字节顺序错误 这是一个pastebin 更多详细信息如下 http pastebin com Sdg9EM61 在我的领域 我们以 FIT 格式存储数据 这是
  • 我们可以在哪里放置 crossdomain.xml

    您好 我已在应用程序 http myserver 11090 apps 上部署了我的 Flex 应用程序 并使用重定向到应用程序服务器的代理服务器 Web 服务器 https mysite site com 但在运行时应用程序在位置 htt
  • SQLite3 错误 - iOS

    当我进行 SQL 调用时 如何找出 SQLite3 给我的错误 int success sqlite3 prepare v2 database sql 1 stmt NULL if success SQLITE OK NSLog creat
  • 没有 fill_diagonal 的 inf 的 Python 矩阵对角线

    我需要将矩阵的对角线元素设置为 Inf 一个简单的方法是使用np fill diagonal np fill diagonal my matrix float inf However fill diagonal修改输入矩阵 而不是返回填充对
  • 想要删除 Browser.sleep()

    大家好 我正在使用量角器来测试非角度网站 最初在测试时我有browser sleep 这样页面就可以完全加载 我知道添加 browser sleep 不是一个好的测试方法 因此想从代码中删除它 我尝试了 browser wait 但出现错误
  • 匹配第 n 次出现(排除最后一次出现)

    我有一个关于正则表达式的问题 我不知道为什么我不能执行以下操作 例句 This is a test string with five t s 我使用的正则表达式 t 3 我希望正则表达式匹配以下内容 This is a test s 但它不
  • 如何在列中打印嵌套的Python列表

    我有一个程序 它生成一个Python列表作为其输出 该列表是一个嵌套列表 列表 名称 地址 电话号码 的列表 我希望能够以柱状格式打印 似乎在陈述问题时是一个非常简单的想法 但我一直无法找到一种简单的方法来从列表中提取数据 如果我打印 列表
  • 检查套件完成后如何触发 Github 工作流程?

    我只想在特定工作流程完成时触发工作流程 有人知道该怎么做吗 一些背景 我有一个工作流程Tests另一个叫Build feature 我运行我的Tests每个 PR 到分支的工作流程feature 如果某些内容被推送 合并到分支feature
  • 几个 catch 块还是一个带有dynamic_cast 的catch 块?

    我们有一个异常类的层次结构 有一个GenericException类以及从它派生的许多类 GenericException是多态的 它有一个虚拟析构函数 派生类之一是FileException抛出以指示操作文件系统对象时出现错误 FileE
  • PHP 中“&$var”中的“&”是什么意思? [复制]

    这个问题在这里已经有答案了 什么是 意思是在 var in PHP 有人可以帮我进一步解释一下吗 先感谢您 这意味着传递变量参考 而不是传递变量的值 这意味着当程序流返回到调用代码时 对 preparse tags 函数中该参数的任何更改都
  • 使用react-router的history.push()和自定义URL参数

    我正在尝试创建一个用户可以加入群组的应用程序 我拥有的页面之一是群组仪表板 为此 我创建了一个 URL 参数为 id 的路由
  • 禁止带有 `static_assert` 的函数

    我想阻止某些函数被调用 让我们忽略通过函数指针或其他东西调用函数的情况 只关注直接函数调用的情况 我可以这样做 delete 然而 发布的诊断信息并不丰富 我考虑过使用static assert 您可以使用它提供自定义诊断消息 我放置了一个