Інші згадали про рішення, використовуючи std::is_same
та decltype
.
Тепер для узагальнення порівняння для довільної кількості функцій підписів можна зробити наступне
#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>...>;
і порівняти стільки функцій, як одна
areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>
( Дивіться демо-версію )
Або для менш введеного тексту (тобто без decltype
), зробіть це як функцію
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
і телефонувати просто мимо
areSameFunctions(funA, funB, funC)
( Дивіться демо-версію )