J'ai un code C++ qui enveloppe un lambda arbitraire et renvoie le résultat du lambda.
template <typename F>
auto wrapAndRun(F fn) -> decltype(F()) {
// foo();
auto result = fn();
// bar();
return result;
}
Cela fonctionne à moins que F
renvoie à void
( error: variable has incomplete type 'void'
). J'ai pensé à utiliser un ScopeGuard
à exécuter bar
mais je ne veux pas bar
à exécuter si fn
lancés. Des idées ?
P.S. J'ai découvert plus tard qu'il y a une proposition visant à corriger cette incohérence .
0 votes
Quelle version de C++, 14 ou 17 ?
0 votes
Il s'agit d'un projet personnel, donc même c++2x convient.
2 votes
J'ai eu le même problème auparavant, la même solution s'applique. stackoverflow.com/questions/24468397/ Il ne s'agit que de C++11, qui pourrait probablement être modernisé.
0 votes
Avez-vous regardé dans
std::invoke
? On dirait que c'est exactement ce dont vous avez besoin1 votes
@SemyonBurov comment
std::invoke
m'aider ici ?