【发布时间】:2018-11-13 12:33:19
【问题描述】:
考虑以下(不工作!)示例:
#include <iostream>
template <typename type> void print(const type & item)
{
std :: cout << item << std :: endl;
}
template <typename... types> void printall(const types & ... items)
{
print(items)...;
}
int main()
{
printall(1, 2, "hello");
}
这里我有一个函数print,它只是打印出它的参数,还有一个可变参数函数printall,它接受一组参数。现在,我想做的只是让printall 将print 应用于包items 的每个元素。我怎样才能做到这一点?
注意:我不是询问如何打印一组值。我知道折叠表达式的存在,我知道我可以使用它们将整个 items 扔到 std::cout 中。这里print只是一个例子,可以是任何函数。
我怎样才能做到这一点?这听起来应该非常简单,但我找不到任何(合理的)语法来做到这一点。
【问题讨论】:
-
我不明白为什么折叠表达式不是答案。
print(items)...;不编译? -
不,
print(items)...;无法编译,我收到以下错误:error: expected ';' after expression。 -
如果您的代码无法编译,请在问题中包含您收到的错误消息。顺便说一句,我认为您正在寻找
std::invoke或std::apply(它们完全不同,但我总是混淆它们) -
(print(items),...);需要括号和逗号。 -
好的。哇。这样可行。但这是什么语法……?
标签: c++ function c++11 templates variadic-templates