J'ai une fonction variadique qui appelle une fonction pour chaque argument.Existe-t-il un moyen de passer le vide comme argument?
Voici ce qu'il ressemble à:
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)
{
}
Si j'appelle la fonction avec Call(2, 2)
il appellera PushArg<int>(2)
deux fois, puis appelez Call()
. Mais je dois être en mesure d'appeler PushArg
mais sans valeur.
Ce que je veux être en mesure de faire est de faire Call(2, void, 4)
et l'ont appelé PushArg<int>(2)
, PushArg<void>()
, puis PushArg<int>(4)
.
Pour l'instant j'ai une classe "null" qui n'existe que pour me permettre de passer une valeur sans valeur, mais cela rend l'appel de la fonction maladroit. Fait ce que j'ai décrit (ou quelque chose de similaire) possible? Non, vous ne pouvez pas passer un type comme argument d'une fonction.
Non, vous ne pouvez pas C++ 'void' remplir ce rôle. Vous devez utiliser un espace réservé. –
Où est défini 'arg', utilisé dans la fonction' Call' variadique? –
@ Cheersandhth.-Alf Pouvez-vous expliquer ce que vous demandez? J'ai dû modifier fortement le code original pour le rendre petit et lisible donc il est possible que j'ai accidentellement omis quelque chose d'important. – user112513312