Je me demandais s'il existe une solution pour spécifier un modèle afin que void
ou tout autre type puisse être passé. Voici un exemple très simplifié, qui ne devrait rien faire d'autre que renvoyer void
si TReturn
est également void
, ou renvoyer la valeur de retour de la fonction (qui renvoie également TReturn
, mais avec la différence, il s'agit alors d'un type) .C++ void ou tout type en tant que paramètre de modèle
template <typename TReturn>
TReturn Foo(std::function<TReturn()> function)
{
if(std::is_same<TReturn, void>::value)
{
// I am not sure what to put here
return function();
}
TReturn returnValue = function();
// Do some stuff with the returnValue here
return returnValue;
}
Maintenant, évidemment, ce que j'ai fait est faux, car une fonction ne peut retourner deux types différents. C'est pourquoi je demande, est-ce que quelqu'un sait comment faire cela?
Toute aide est appréciée avec plaisir
La mauvaise chose ici est que vous supposiez 'TReturn' être constructible par défaut (ce qui n'est pas le cas de' void'). Sinon, ça me semble ok. – davidhigh
Un autre problème est que vous essayez de générer 'return void' au lieu de 'return' –
@ManishBaphna oui, je sais que c'est faux c'est pourquoi je cherchais un moyen de rendre cette déclaration vraie pour les types non-'void' et en trouver un autre pour 'void' –