Elija la función para aplicar en función de la validez de una expresión
El problema es el siguiente, enC++14
:
FV&& valid_f
, FI&& invalid_f
y argumentosArgs&&... args
La funciónapply_on_validity
debería aplicarvalid_f
enargs
si la expresiónstd::forward<FV>(valid_f)(std::forward<Args>(args)...)
es válidaDe lo contrario y sistd::forward<FV>(invalid_f)(std::forward<Args>(args)...)
es una expresión válidaapply_on_validity
debería aplicarinvalid_f
enargs
De otra maneraapply_on_validity
no debería hacer nadaSupongo que el código debería verse así:
template <class FV, class FI, class... Args, /* Some template metaprog here */>
void apply_on_validity(FV&& valid_f, FI&& invalid_f, Args&&... args)
{
// Apply valid_f by default
std::forward<FV>(valid_f)(std::forward<Args>(args)...);
}
template <class FV, class FI, class... Args, /* Some template metaprog here */>
void apply_on_validity(FV&& valid_f, FI&& invalid_f, Args&&... args)
{
// Apply invalid_f if valid_f does not work
std::forward<FV>(invalid_f)(std::forward<Args>(args)...);
}
template <class FV, class FI, class... Args, /* Some template metaprog here */>
void apply_on_validity(FV&& valid_f, FI&& invalid_f, Args&&... args)
{
// Do nothing when neither valid_f nor invalid_f work
}
Pero realmente no sé cómo hacer eso. ¿Alguna idea?
Enlace a la generalizaciónaquí.