问题标签 [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 回答
5226 浏览

c++ - 如何检测可变参数模板中的第一个和最后一个参数?

如何检测可变参数模板中的第一个和最后一个参数?

对于第一个参数很容易(只需sizeof...(T)与 0 比较),但是有没有办法检测最后一个元素?

这个例子 :

0 投票
2 回答
4312 浏览

c++ - 如何使用 pre-c++0x(VS2008) 实现“可变参数模板”?

我正在使用 Visual Studio 2008,我想在没有 Variable Argument List的情况下实现字符串格式化功能。

如何使用 pre-c++0x(VS2008) 实现“可变参数模板”?

有没有像boost这样实现这个的库?

或者另一种实现方式?

这是我的示例代码。(当然,由于我使用的是VS2008,所以无法遵守。)

0 投票
3 回答
10200 浏览

c++ - 将 args 的参数包解压缩到可变参数模板中定义的每个类的构造函数中

我正在尝试创建一个从多个类(由可变参数模板定义)继承的类,并且对于每个类,将相同的 args 参数包传递给每个类的构造函数。但是,似乎我无法解压缩类的可变参数模板和 args 的参数包。

我有一堂课:

使用构造函数:

并测试:

gcc 失败:

在哪里__Policies = T1, T2

为了澄清,我本质上是在尝试做:

但从T1_ T2___Policies

有任何想法吗?似乎 gcc 将__Policies其视为单一类型而不是类型列表。提前致谢!


编辑:

我应该澄清一下我使用的是 gcc/g++ 4.4.5。

Howard Hinnant 的建议是:

但是,对于 gcc/g++ 4.4.5,这给出了invalid use of pack expansion expression. 这在 OSX/clang 中工作很好,但是有没有办法在 gcc/g++ 中做到这一点?

0 投票
2 回答
1390 浏览

c++ - 可变参数模板之谜

这是运行良好的代码:

现在我想知道为什么我们需要部分专门化计数类模板?

我们可以做类似的事情:

但这不起作用,但为什么?

非常感谢任何帮助:)

编辑:根据答案编辑解决方案。

0 投票
2 回答
508 浏览

c++ - 可变参数模板,编译器道歉

我之前曾问过类似的问题,了解到我可以通过部分专业化使其工作。但是为了理解可变参数模板的基础知识,我修改了这样的代码。

错误:“抱歉,未实现:无法将 'args ...' 扩展为固定长度的参数列表”

我知道这是错误并已在 gcc 4.7.0 中修复

所以要解决这一切,我们必须使用技巧或任何东西,这是对模板的部分特化。

实际问题:所以我真的很想知道部分专业化在这里有什么特殊效果,这样代码才能工作,或者我应该问部分专业化如何解决这个问题?(为什么第二个版本没有遇到bug?)。任何有关动机问题和示例的解释都将非常有帮助。

0 投票
1 回答
721 浏览

c++ - C++ 模板可变但静态

我正在用 C++ 训练我的模板技能,并希望实现一个向量类。该类由向量维度 N 和类型 T 定义。现在我想要一个构造函数,它恰好采用 N 个类型为 T 的变量。但是我不知道如何告诉可变参数模板只接受 N参数。也许这可以通过模板专业化实现?还是我想错了方向?对此的任何想法/想法将不胜感激。

更多想法

我已经看到的关于可变参数模板的所有示例都使用递归来“迭代”参数列表。但是我记住不能从构造函数中调用构造函数(阅读答案中的注释)。那么也许甚至不可能在构造函数中使用可变参数模板?无论如何,这只会让我推迟使用具有相同基本问题的工厂函数。

0 投票
1 回答
6242 浏览

c++ - 具有可变参数模板的模板专业化

这不会编译,第二个 doStuff 声明给了我error: template-id ‘doStuff<1u, int, bool>’ for ‘void doStuff(int, bool)’ does not match any template declaration,但它清楚地将第一个声明与可变参数模板参数相匹配。

如何专门化可变参数模板?

0 投票
1 回答
1737 浏览

c++ - 为什么这个带有可变模板参数的构造函数不匹配?

我实现了一个处理管道,但我想像这样改进它:

不幸的是,上面的例子产生了下一个错误:

这个错误的原因是什么?
如何解决?

只是一个小小的解释。我希望上面的示例将首先创建一个未专门化的对象,pipeline<>( snk )然后是专门化对象pipeline< f1 >(b1,snk),然后是专门化对象pipeline< f1, f2 >(src,b1,snk)
顺便说一句,请注意上面的示例适用于 1 个过滤器 ( pipeline< f1)。

0 投票
8 回答
85571 浏览

c++ - “解包”元组以调用匹配的函数指针

我正在尝试存储std::tuple不同数量的值,这些值稍后将用作调用与存储类型匹配的函数指针的参数。

我创建了一个简化示例,展示了我正在努力解决的问题:

通常对于涉及std::tuple或可变参数模板的问题,我会编写另一个模板,例如template <typename Head, typename ...Tail>递归地逐个评估所有类型,但我看不到一种方法来调度函数调用。

这样做的真正动机要复杂一些,而且无论如何它主要只是一个学习练习。您可以假设我是通过合同从另一个接口传递元组的,因此无法更改,但将其解压缩到函数调用中的愿望是我的。这排除了使用std::bind作为回避潜在问题的廉价方法。

什么是使用 调度调用的干净方法std::tuple,或者是实现存储/转发某些值和函数指针直到任意未来点的相同净结果的替代更好方法?

0 投票
1 回答
163 浏览

c++ - 可变参数模板表现怪异

我想知道我是否做错了什么,或者这是否是编译器错误。我正在使用 Intel C++ Composer XE 2011 for Windows with SP1(或更新 6,目前是最新的)。请参阅代码中的注释行。