C++ 有没有一种方法可以将void作为参数传递?
我有一个变量函数,它为每个参数调用一个函数 这就是它看起来的样子:C++ 有没有一种方法可以将void作为参数传递?,c++,c++11,templates,variadic-templates,void,C++,C++11,Templates,Variadic Templates,Void,我有一个变量函数,它为每个参数调用一个函数 这就是它看起来的样子: 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&l
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)
{
}
void调用()
{
}
模板
无效调用(T参数)
{
PushArg(arg);
Call();
}
模板
无效调用(T参数,参数…参数)
{
PushArg(arg);
呼叫(标准:转发(args)…);
}
模板
无效PushArg(T arg)
{
}
模板
无效PushArg(内部参数)
{
}
如果我用call(2,2)
调用函数,它将调用PushArg(2)
两次,然后调用call()
。但是我需要能够调用PushArg
,但没有值
我想做的是调用(2,void,4),让它调用PushArg(2)
,PushArg()
,然后调用PushArg(4)
目前,我有一个“null”类,它只允许我传递一个没有值的值,但它使调用函数变得很尴尬。是否可以执行我描述的(或类似的)操作?不,不能将类型作为函数的参数传递。我能想到的唯一解决方案是使用一种特殊类型(我想是您的“null类”)来替换
void
我认为这是一个干净的解决方案,所以我举了一个例子
#include <utility>
#include <iostream>
struct voidWrp
{ };
void PushArg ()
{ std::cout << "- void PushArg" << std::endl; }
template <typename T>
void PushArg (T arg)
{ std::cout << "- generic (T) PushArg" << std::endl; }
template <>
void PushArg<int> (int arg)
{ std::cout << "- int PushArg" << std::endl; }
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 ... Args>
void Call (voidWrp const &, Args ... args)
{
PushArg();
Call(std::forward<Args>(args)...);
}
int main()
{
Call("std::string value", 3, voidWrp{}, 6, 7L);
}
不,不能将类型作为函数的参数传递。我能想到的唯一解决方案是使用一种特殊类型(我想是您的“null类”)来替换
void
我认为这是一个干净的解决方案,所以我举了一个例子
#include <utility>
#include <iostream>
struct voidWrp
{ };
void PushArg ()
{ std::cout << "- void PushArg" << std::endl; }
template <typename T>
void PushArg (T arg)
{ std::cout << "- generic (T) PushArg" << std::endl; }
template <>
void PushArg<int> (int arg)
{ std::cout << "- int PushArg" << std::endl; }
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 ... Args>
void Call (voidWrp const &, Args ... args)
{
PushArg();
Call(std::forward<Args>(args)...);
}
int main()
{
Call("std::string value", 3, voidWrp{}, 6, 7L);
}
不,不能让C++ >代码>空洞< /代码>填充这个角色。您需要使用占位符。可变
调用
函数中使用的arg
在哪里定义?@cheers-sandhth.-Alf您能解释一下您的问题吗?我不得不对原始代码进行大量修改,使其小巧易读,因此可能是我不小心遗漏了一些重要的内容。对不起,我现在看到了,显然问题还没有被编辑。别理它,是我的眼睛或视觉子系统在欺骗我。请发真实代码。在发布之前先编译它。通过复制粘贴,不重写。常规无效建议:不,不能使C++ >代码>空洞< /代码>填充此角色。您需要使用占位符。可变调用
函数中使用的arg
在哪里定义?@cheers-sandhth.-Alf您能解释一下您的问题吗?我不得不对原始代码进行大量修改,使其小巧易读,因此可能是我不小心遗漏了一些重要的内容。对不起,我现在看到了,显然问题还没有被编辑。别理它,是我的眼睛或视觉子系统在欺骗我。请发真实代码。在发布之前先编译它。通过复制粘贴的方式发布,而不是重新键入。常规作废建议: