Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种方法可以将void作为参数传递?_C++_C++11_Templates_Variadic Templates_Void - Fatal编程技术网

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您能解释一下您的问题吗?我不得不对原始代码进行大量修改,使其小巧易读,因此可能是我不小心遗漏了一些重要的内容。对不起,我现在看到了,显然问题还没有被编辑。别理它,是我的眼睛或视觉子系统在欺骗我。请发真实代码。在发布之前先编译它。通过复制粘贴的方式发布,而不是重新键入。常规作废建议: