D'autres ont mentionné la solution en utilisant std::is_same
et decltype
.
Maintenant, pour généraliser la comparaison d'un nombre arbitraire de signatures de fonction, vous pouvez effectuer les opérations suivantes
#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>...>;
et comparer autant de fonctions qu'une comme
areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>
( Voir la démo en direct )
Ou pour moins de frappe (c'est-à-dire sans decltype
), faites-le en fonction
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
et appeler simplement par
areSameFunctions(funA, funB, funC)
( Voir la démo en direct )