Altri hanno menzionato la soluzione usando std::is_same
e decltype
.
Ora per generalizzare il confronto per un numero arbitrario di firme di funzioni, è possibile effettuare le seguenti operazioni
#include <type_traits> // std::is_same, std::conjunction_v
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions = std::conjunction_v<std::is_same<Func, Funcs>...>;
e confronta quante funzioni desideri
areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>
( Vedi la demo dal vivo )
O per meno digitando (cioè senza decltype
), renderlo come una funzione
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
e chiama semplicemente da
areSameFunctions(funA, funB, funC)
( Vedi la demo dal vivo )