C++ 中参数数量未定义[重复]

2023-12-03

我可以重载我的函数来执行带有大量参数的操作吗JavaScript。 例如:

function f()
{
  alert(arguments[0]);
}

f(4); // will alert 4 

我可以做同样的事情吗C++ ?


您可以使用可变参数模板参数和元组:

#include <tuple>
#include <iostream>

template <class... Args>
void f(Args&&... args)
{
    auto arguments = std::make_tuple(std::forward<Args>(args)...);
    std::cout << std::get<0>(arguments);
}

void f() {} // for 0 arguments

int main()
{
    f(2, 4, 6, 8);
}

现场演示

对于边界检查,请尝试以下操作:

#include <tuple>
#include <iostream>

template <class... T>
struct input
{
    std::tuple<T...> var;
    input(T&&... t) : var(std::forward<T>(t)...) {}

    template <std::size_t N, bool in_range = 0 <= N && N < std::tuple_size<decltype(var)>::value>
    auto get() -> typename std::tuple_element<in_range ? N : 0, std::tuple<T...>>::type
    {
        return std::get<in_range ? N : 0>(var);
    }
};

template <class... Args>
void f(Args&&... args)
{
    auto arguments = input<Args...>(std::forward<Args>(args)...);

    std::cout << arguments.template get<9>();
}

void f() {} // for 0 arguments

int main()
{
    f(2, 4, 6, 8);
}

更新:如果您需要第一个参数,那么您只需要一个通过将第一个参数与参数包分离来公开第一个参数的函数:

template<class Head, class... Tail>
void foo(Head&& head, Tail&&... tail);

如果这不令人满意(即您想要获得第 n 个参数),您可以将参数解压缩到std::tuple<>并检索一个元素std::get<>:

template<class... Args>
void foo(Args&&... args)
{
    auto t = std::forward_as_tuple(std::forward<Args>(args)...);
    print(std::get<5>(t));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中参数数量未定义[重复] 的相关文章

  • InvalidOperationException - 对象当前正在其他地方使用 - 红十字

    我有一个 C 桌面应用程序 其中我连续创建的一个线程从源 实际上是一台数码相机 获取图像并将其放在 GUI 中的面板 panel Image img 上 这必须是另一个线程 如它是控件的代码隐藏 该应用程序可以工作 但在某些机器上 我会在随
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且

随机推荐

  • 如何使实体框架数据上下文只读

    我需要向第三方插件公开实体框架数据上下文 目的是允许这些插件仅获取数据 而不是让它们发出插入 更新或删除或任何其他数据库修改命令 因此 我怎样才能使数据上下文或实体只读 除了与只读用户连接之外 您还可以对 DbContext 执行一些其他操
  • 如何在不暂停脚本的情况下监听 STDIN 输入?

    我有一个while循环持续侦听传入连接并将其输出到控制台 我希望能够通过控制台发出命令而不影响输出 我试过了 Thread new do while true input gets chomp puts So I herd u sed in
  • 如何在 Swift 中的路径中查找没有路径扩展的文件的文件 UTI

    我一直在尝试转换我从中得到的代码example 在 Objective c 中 没有运气 String path contains the file path Get the UTI from the file s extension CF
  • Java中的按位右移运算符

    在 Java 中 4 gt gt 2 给出 1 但 5 gt gt 2 给出 2 有人能解释一下为什么吗 这是示例代码 byte r 5 r gt gt 2 System out println r 同样在这种情况下 gt gt 和 gt
  • Facebook Connect 在模拟器/设备上的工作方式不同,但在 Google Play 上则不然

    我的应用程序中出现奇怪的 Facebook 连接行为 如果我在模拟器中使用它 则对 facebook request 用于检索用户数据 和 facebook dialog 用于在墙上发布 的调用是在 facebook authorize g
  • 如何从 vNext 构建代理上的自定义脚本加载 PowerShell 模块?

    我正在使用标准 TFS vNext 构建步骤来执行 PowerShell 脚本 在脚本中 我尝试利用标准 TFS 代理模块中的一些功能 此处列出 http blog majcica com 2015 11 14 available modu
  • 从 TWIG 模板访问会话

    我在网上搜索了很多如何访问全局 SESSION从 TWIG 模板中获取数组并发现 app session get index 但是当我调用它时 它返回一个空字符串 我有一个 SESSION filter accounts 我在调用时收到此错
  • 使用 dplyr 填充缺失值(通过连接?)

    我有一个数据框 df1 其中缺少一些值 城市 州 SiteID City StateBasedIn Lat Lon Var1 Var2 4227 Richmond KY 39 113 6 0 4987 Nashville TN 33 97
  • 锚点定位

    我有一个使用 WordPress 垂直滚动创建的长垂直网站 parallax 输入主题 所有内容区域都是通过 帖子 创建的 帖子标题是 H1 我在页面顶部创建了一个粘性菜单 调用我在帖子标题中设置的锚点 以尝试获得最准确的定位 例如下面 a
  • Iphone - 多个应用程序、不同的应用程序 ID、相同的令牌

    据我了解 如果一台设备上安装了多个具有不同应用程序 ID 的应用程序 则为每个应用程序生成的推送通知的令牌应该是唯一的 就我而言 我有几个使用不同配置文件编译的应用程序 每个应用程序都基于不同的应用程序 ID 尽管其中一些具有相同的 Bun
  • 将 css 网格 2 列拆分为 3 列以用于特定行

    我有一个 2 列布局 并且希望将一行拆分为 3 列布局 是否可以在最初不指定 3 列布局的情况下实现 Example 该行中的所有 7 应分为 3 个部分 请参阅代码输出 1到1 5显然不行 grid container display g
  • 防止TCP连接导致UDP丢包

    考虑典型的多人游戏服务器 连接到服务器的客户端可以下载地图和脚本 创建 TCP 连接来完成此操作非常简单 但是 服务器必须继续通过 UDP 响应其余客户端 如果允许 TCP 下载连接使可用带宽饱和 则 UDP 流量将因数据包丢失而受到严重影
  • Vanilla JavaScript 相当于 jQuery 的 $.ready() - 当页面/DOM 准备好时如何调用函数 [重复]

    这个问题在这里已经有答案了 有了 jQuery 我们都知道它的精彩 ready 功能 document ready function 但是 假设我想运行一个用标准 JavaScript 编写的函数 没有库支持它 并且我想在页面准备好处理它时
  • 顺序访问内核驱动程序中的大页

    我正在使用一个由大页支持的缓冲区的驱动程序 并且我发现了一些问题顺序性大页 在用户空间中 程序使用大页分配一个大缓冲区mmap系统调用 然后缓冲区通过一个ioctl称呼 驱动程序使用get user pages函数来获取该缓冲区的内存地址
  • 如果在线,则获取 SonarLint 的远程配置文件;如果离线,则使用本地配置文件

    Current 我的公司目前正在使用 checkstyle 和 findbugs 脚本来衡量他们的代码质量 我是将这些设置迁移到新的 SonarQube 驱动环境中的人 当我开始想知道是否可以查看正在运行的 SonarQube 服务器的远程
  • 在Python中的列表中使用startswith()函数

    我有下面包含以下字符串的列表 some list 9196358485 9966325645 8846853128 8 4 236 2 9 6 32 45 Need to fetch some strings 从上面的字符串我只想要不开头的
  • C# 两个数字列表之间的逐元素差异

    Assume List
  • 在 C# 中进行 Windows 突出显示搜索

    是否可以通过 C 来实际进行 Windows 搜索 您在 Vista 中从带有突出显示的菜单中找到的搜索 例如 您写 fire 并得到 firefox 谢谢 是的 这可以通过 Windows 桌面搜索 WDS API 实现 你将需要SDK
  • 查找两个数组中公共值的索引

    我正在使用Python 2 7 我有两个数组 A 和 B 为了找到 A 中存在于 B 中的元素的索引 我可以这样做 A inds np in1d A B 我还想获取 A 中存在的 B 中元素的索引 即我使用上述代码找到的相同重叠元素在 B
  • C++ 中参数数量未定义[重复]

    这个问题在这里已经有答案了 我可以重载我的函数来执行带有大量参数的操作吗JavaScript 例如 function f alert arguments 0 f 4 will alert 4 我可以做同样的事情吗C 您可以使用可变参数模板参