具有可变数量的特定类型参数的 C++ 函数

2024-01-04

我刚刚了解了 C++ 中的可变参数模板。我实现了它,但我想知道它可以执行以下操作吗?

如果我想要一个参数数量可变的函数,我可以这样做:

template <typename... Ts>
f(Ts... args);

但我失去了类型安全(我不知道参数的类型)。

如果我知道我的函数只需要怎么办float作为论据?我想在编译时确保每个参数都是我想要的类型。

所以这些是我的问题:

  • 有没有办法用可变参数模板强制某种类型(类似这样)?

    template <float... Fs>
    f(Fs... args); // unlimited number of arguments but only float
    
  • 如果没有,有没有办法在编译时检查它?static_assert(std::is_same<A,B>)在大多数情况下都很好,但它不适用于模板化类(就像我的用例):

    template <typename T, uint16_t dimension>
    class Vector
    {
        template <typename... Ts>
        Vector(Ts... args)
        {
            static_assert(sizeof...(args) == dimension);
            static_assert(std::is_same_v<Ts..., T>()); //doesn't work because Ts will
                                                       //develop into a lot of template 
                                                       //arguments. Just putting Ts doesn't
                                                       //work either.
        }
    }
    

PS:是的,我可以使用std::vector or std::array作为论点,但这不是重点。另外,我想保持美丽Vector(2.0, 1.0, 0.0)语法,不使用花括号。


template <typename T, uint16_t dimension>
class MyVector
{
  public:
    template <typename... Ts>
    MyVector(Ts... args)
    {
        static_assert(sizeof...(args) == dimension);
        static_assert((std::is_same<T,Ts>::value && ...) );
    }
};

还可以使用 C++17 中提供的一元右折叠表达式https://en.cppreference.com/w/cpp/language/fold https://en.cppreference.com/w/cpp/language/fold

这本质上是

std::is_same<T,Ts_1>::value && ( std::is_same<T,Ts_2>::value && ... std::is_same<T,Ts_n>::value ) ...)

当参数包 Ts 为空时也有效。引用自参考链接:

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

具有可变数量的特定类型参数的 C++ 函数 的相关文章

  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 构建 ID 的测试结果

    作为计划构建的一部分 我运行并发布了多个具有不同测试运行标题的测试 我的场景是 在发布管道期间 我想获取为正在创建的版本的构建发布的每个测试运行标题的测试摘要 可以使用哪些 Azure DevOps API 或 API 组合来实现此目的 谢
  • 将光标传递到另一个活动是否安全?

    我正在尝试使用光标进行水平滑动 但我只是没有摸索某些东西 希望这里有人可以帮助我理解 我有一个显示项目列表的活动 它使用一个ListView由习俗支持CursorAdapter 并且该适配器由LoaderCallback 这都是标准的东西
  • 在Raspberry Pi上使用Selenium和Python登录zoom时出现错误401

    我正在学习使用 Selenium 我的目标是通过 Raspberry Pi 4 上的 python 程序打开 Zoom 运行粘贴的代码后 该程序按预期工作 打开放大浏览器 最大化窗口 选择并单击 登录 输入凭据 然后按 Enter 键 尝试
  • PARSE_DATETIME 格式化为一年中的某一天

    BigQuery 中与年份 j 格式设置元素一起使用的 PARSE DATETIME 函数存在问题 该函数似乎忽略了一年中的某一天元素 Eg select PARSE DATETIME Y j 2013243 returns 2013 01
  • PayPal API,寻找合适的 API

    我需要在我的网站中添加使用 PayPal 付款的选项 我想要一个 API 我可以在其中向 PayPal 发送信息并立即取回交易 ID 以便我可以将其保存在我的数据库中 哪种 API 最适合我 有没有办法做到这一点 我看到他们有这个清单 li
  • 使用 virtualenv 时在 pythonpath 中包含 Git 子模块

    我正在使用 Git 对 Django 项目进行版本控制 尽可能将所有不属于项目本身但项目所依赖的源代码作为 Git 子模块引入 这些生活在lib目录并且必须包含在 python 路径中 目录 文件布局如下所示 git docs lib my
  • Swift:如何使 UIView 在 UITableViewCell 中可点击?

    里面一个UITableViewCell 我正在尝试实现一个button与两个image and a text 看来是标准UIButton无法实现这一点 所以我创建了一个UIView其中包含一个UIImageView and a UILabe
  • 嵌入式 C++ 系统中的持续集成/单元测试

    通常使用哪些工具进行单元测试 尤其是嵌入式系统的持续集成 我特别认为你通常必须交叉编译和部署 而且你不能轻松地可视化目标平台 运行测试代码和框架也可能很困难 我可以用什么来缓解这些困难呢 我认为它应该是某种双重目标 构建服务器在更容易的目标
  • 重写 onSaveInstanceState

    我正在努力应对onSaveInstanceState类中的方法View https developer android com reference android view View html onSaveInstanceState 28
  • Apache Spark 的性能调优

    我正在开发一个项目 我必须调整 Spark 的性能 我发现了四个最重要的参数 它们将有助于调整 Spark 的性能 它们如下 火花记忆分数 Spark 内存 offHeap 大小 Spark Storage MemoryFraction S
  • Entity Framework Core 将不会映射到 BigInteger

    我需要使用BigInteger类来处理我的类的大整数 但是当尝试使用 Entity Framework Core 映射到数据库表时 我收到以下错误 该物业AllianceRank Reputation无法映射 因为 它是类型BigInteg
  • app-release.apk 是 zipaligned apk 吗?

    我使用的是Android Studio 1 0 2 当我在gradle任务中单击assembleRelease时 会生成两个文件 app release unaligned apk和app release apk 我知道 app relea
  • 使用 python 进行 SICP 的材料?

    我想用 Python 尝试 SICP 任何人都可以指出教授计算机程序的结构和解释的材料 视频 文章 python 目前正在学习 Abelson Sussman 和 Sussman 的 SICP 视频 我想这对你来说会很棒CS61A SICP
  • 尝试从应用内发送电子邮件但不起作用 - Swift (iOS)

    我尝试了来自不同网站的 2 个代码从我的 iOS 应用程序发送电子邮件 当我按下Send按钮它调用方法邮件撰写控制器并且总是返回日志 邮件已发送 作为result参数总是MFMailComposeResultSent value 即使我有
  • 管道中何时进行路由?

    ASP NET MVC 管道中何时进行路由 IIS 7 0 的 ASP NET 应用程序生命周期概述 http msdn microsoft com en us library bb470252 aspx 是否在第 2 步 执行 URL 映
  • TinyMCE初始化后修改工具栏的正确方法

    我正在使用 JavaScript 扩展云托管的 LMS 因此 我们可以在页面中添加javascript 但不能针对不同的组件修改供应商的javascript LMS 经常使用tinyMCE 目标是在每个tinyMCE编辑器的工具栏上添加一个
  • 通过向包装器传递 R 中的一组参数来生成 N 个 ggplot 图?

    我有一个输出数据框的函数 如下所示 df A tibble 100 x 7 test idx train user id test user id train idx D isSame D rank
  • 如何修复 PHP 警告:PHP 启动:无法加载动态库 'ext\\php_curl.dll'?

    我目前在 Windows Server 2008 R2 上安装了 PHP 5 5 12 和 Apache 2 4 一切都运行完美 没有问题 警告 我所做的是将相同的 Apache 文件 配置复制到另一台服务器 我复制了C PHP目录 然后是
  • 正则表达式在文本中查找 url

    我必须使用正则表达式找到文本中的第一个网址 例如 I love this website http www youtube com music it s fantastic or es http www youtube com music
  • 具有可变数量的特定类型参数的 C++ 函数

    我刚刚了解了 C 中的可变参数模板 我实现了它 但我想知道它可以执行以下操作吗 如果我想要一个参数数量可变的函数 我可以这样做 template