【发布时间】:2017-07-10 07:45:20
【问题描述】:
我有一个可变参数函数,它为每个参数调用一个函数。
这就是它的样子:
void Call()
{
}
template<typename T>
void Call(T arg)
{
PushArg(arg);
Call();
}
template<typename T, typename ...Args>
void Call(T arg, Args... args)
{
PushArg(arg);
Call(std::forward<Args...>(args)...);
}
template<typename T>
void PushArg(T arg)
{
}
template<>
void PushArg<int>(int arg)
{
}
如果我用Call(2, 2) 调用函数,它将调用PushArg<int>(2) 两次,然后调用Call()。但我需要能够拨打PushArg 但没有任何价值。
我想要做的是Call(2, void, 4) 并让它调用PushArg<int>(2)、PushArg<void>(),然后是PushArg<int>(4)。
目前我有一个“null”类,它只允许我传递一个没有值的值,但这使得调用函数很尴尬。做我描述的(或类似的)可能吗?
【问题讨论】:
-
不,你不能让 C++
void担任这个角色。您需要使用占位符。 -
可变参数
Call函数中使用的arg在哪里定义? -
@Cheersandhth.-Alf 你能解释一下你在问什么吗?我不得不大量修改原始代码以使其小而易读,所以我可能不小心遗漏了一些重要的东西。
-
对不起,我现在看到了,显然这个问题还没有被编辑。忽略这一点,这是我的眼睛或视觉子系统在欺骗我。
请发布真实代码。在发布之前编译它。通过复制和粘贴的方式发布,而不是重新输入。
标签: c++ c++11 templates variadic-templates void