Otros han mencionado la solución usando std::is_same
y decltype
.
Ahora, para generalizar la comparación de un número arbitrario de firmas de funciones, puede hacer lo siguiente
#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>...>;
y compara tantas funciones como quieras
areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>
( Ver demostración en vivo )
O para escribir menos (es decir, sin decltype
), hágalo como una función
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
y llama simplemente por
areSameFunctions(funA, funB, funC)
( Ver demostración en vivo )