У меня есть вариационная функция, которая вызывает функцию для каждого аргумента.Есть ли способ передать пустоту в качестве аргумента?
Это то, что он выглядит следующим образом:
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' заполнить эту роль. Вам нужно использовать заполнитель. –
Где находится 'arg', используемый в вариационной функции' Call', определен? –
@ Cheersandhth.-Alf Не могли бы вы объяснить, что вы спрашиваете? Мне пришлось в значительной степени изменить исходный код, чтобы сделать его маленьким и читаемым, поэтому возможно, что я случайно опустил что-то важное. – user112513312