Ich habe eine Variadic-Funktion, die eine Funktion für jedes Argument aufruft.Gibt es eine Möglichkeit, die Leere als Argument zu übergeben?
Dies ist, wie es aussieht: es PushArg<int>(2)
zweimal anrufen und dann Call()
rufen
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)
{
}
Wenn ich die Funktion mit Call(2, 2)
nennen. Aber ich muss PushArg
anrufen können, aber ohne Wert.
Was ich in der Lage sein wollen, ist Call(2, void, 4)
zu tun zu tun und haben es PushArg<int>(2)
nennen, PushArg<void>()
, dann PushArg<int>(4)
.
Im Moment habe ich eine "Null" -Klasse, die nur existiert, um mir zu erlauben, einen Wert ohne Wert zu übergeben, aber es macht den Aufruf der Funktion peinlich. Ist das möglich, was ich beschrieben habe (oder etwas Ähnliches)?
Nein, können Sie nicht C++ machen 'void' diese Rolle auszufüllen. Sie müssen Platzhalter verwenden. –
Wo ist der 'arg', der in der variadischen Call-Funktion verwendet wird, definiert? –
@ Cheersandthth.-Alf Können Sie erklären, was Sie fragen? Ich musste den ursprünglichen Code stark modifizieren, um ihn klein und lesbar zu machen, so dass ich versehentlich etwas Wichtiges auslassen konnte. – user112513312