问题标签 [variadic-templates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1715 浏览

c++ - 如何使用可变参数模板实现折叠

我有一个几乎可行的解决方案。但是,它无法编译一些简单的案例,并且我无法破译错误消息。

我目前的解决方案:

按预期工作

但是,这无法编译

奇怪的是,如果我std::forward从代码中删除 all 和 rvalue refs,它就可以正常工作

我究竟做错了什么?
这是编译器错误吗?

0 投票
4 回答
4540 浏览

c++ - C ++ 11中的最小和最大可变参数模板变体?

我是否正确地阅读了从minmaxminmax就此而言)有新的initializer_list变体但没有Variadic Template变体的标准?

因此,这没关系:

但这不是:

我想,很多人会期望 Variadic Templates 可以轻松实现这一点,因此他们可能会感到失望。

我会说将VT用于min并且max会矫枉过正

  • 可变参数模板能够处理多种类型
  • 初始化器列表检查所有类型在设计上是否相同

因此 IL 更适合这项任务。

我的解释正确吗?

0 投票
1 回答
1796 浏览

c++ - 可变参数模板和类型特征

我目前有一个可变参数函数,它接受任意数量的任意类型的参数(duh),但是,我想将类型限制为仅 POD 的类型,并且与 void* 的大小相同或更小。

void* 检查很简单,我只是这样做了:

但是我不知道如何对 std::is_pod 做同样的事情。

这可能吗?

0 投票
12 回答
31135 浏览

c++ - 漂亮的打印 std::tuple

这是我之前关于漂亮打印 STL 容器的问题的后续,为此我们设法开发了一个非常优雅且完全通用的解决方案。


在下一步中,我想std::tuple<Args...>使用可变参数模板包括漂亮的打印(所以这是严格的 C++11)。对于std::pair<S,T>,我简单地说

打印元组的类似结构是什么?

我尝试了各种模板参数堆栈解包,传递索引并使用 SFINAE 来发现我何时位于最后一个元素,但没有成功。我不会用我损坏的代码给你带来负担;希望问题描述足够直截了当。本质上,我想要以下行为:

包含与上一个问题相同级别的通用性(char/wchar_t,对分隔符)的奖励积分!

0 投票
1 回答
152 浏览

templates - C++0x:在多个迭代器上应用函数

我正在尝试编写一个将函数映射到多个迭代器的函数。会是这样的

然后出现的问题是 fun_over_variadic_args 中的函数 Fun 需要模板化,这意味着它不能是 lambda,也不能是需要污染全局命名空间的本地函数对象。

有人知道更好的解决方案吗?
谢谢

编辑:请注意,我想要尽可能快的速度,因此首选保留内联所有函数调用的可能性的解决方案。

Edit2:刚刚意识到我可以使用匿名名称空间将 Fun 函数的范围限制为一个文件。如果存在的话,我仍然很想知道一个更整洁的解决方案。

替代解决方案我发现只要将结果传递给另一个函数,我就可以将函数 fun 应用于可变参数包。因此,如果我有一个函数 fun 想应用于每个参数,我可以做类似的事情

澄清替代解决方案然而,使用这个意味着 fun 不能返回 void

0 投票
3 回答
12970 浏览

c++ - 空参数包的模板特化

我有一个可变参数模板函数,它调用自身来确定列表中的最大数字(由模板化参数构成)。我正在尝试对参数包为空时进行专门化,因此我可以只返回列表前面的数字,但我不知道该怎么做。我刚刚熟悉可变参数模板和模板专业化,但这是我目前所拥有的:

但是,这会产生以下错误:

我也试过这个,只是想看看它是否可以工作(尽管它随机将数字 0 引入列表,因此它永远不会返回小于 0 的数字):

但是,除了上面提到的错误之外,我还收到了这个错误:

那么我应该怎么做才能让它工作呢?

我正在使用带有-std=c++0x标志的 g++ 4.5.2。

0 投票
3 回答
38172 浏览

c++ - 可变参数模板模板和完美转发

这个关于对象生成器模式的问题让我想到了自动化它的方法。

本质上,我想自动创建像std::make_pair,这样的函数std::bind1ststd::mem_fun这样就不必为每个模板类类型编写不同的函数,您可以编写一个单一的可变参数模板模板函数来一次处理所有情况。此功能的用法如下:

可以写这个函数make吗?我已经尝试过了,但它在 GCC 4.5 或 4.6 中不起作用:

如果我尝试打电话(例如)make<std::pair>(1, 2)我会得到

我在这里的任何地方都有语法错误吗?
或者这是对的,而 GCC 是错的?
或者这在 C++0x 中根本不可能?

[编辑]

提案N2555似乎表明这是允许的,并且GCC 声称已在 GCC4.4 中实现了它

0 投票
1 回答
474 浏览

c++11 - 可变参数模板问题

我正在尝试编写一个通用代码来比较 std::functions 使用它的 target() 模板方法。这是我的非通用示例代码:

这可以使用 gcc 4.6.1 -std=c++-x 编译并运行良好。但是,当我尝试编译以下通用 cmp 函数时,编译器会因解析错误代码而失败:

错误代码是:

有什么提示吗?

0 投票
1 回答
892 浏览

c++ - 比较可变参数模板

如果我有两个可变参数模板参数,A并且B,我如何在编译时确保所有成员的 A类型也是B(以相同顺序)的子集的类型?

人为的例子:

0 投票
3 回答
537 浏览

c++11 - 实现具有 const 正确性的可变参数 zip 函数

我正在尝试实现一个zip功能。 zip的参数是 each wrapped<Ti>,其中Ti因参数而异。

zip接受这些wrapped<Ti>s 并产生一个wrapped<tuple<T1&,T2&,...TN&>>,或者换句话说,一个包装tuple了对其参数的引用。引用应保留const-ness。

这是我第一次尝试zip使用一个参数,但通常不起作用:

有没有办法用单一版本的zip?