Diğerleri std::is_same
ve kullanarak çözümden bahsetmişlerdir decltype
.
Şimdi isteğe bağlı sayıda işlev imzası karşılaştırmasını genelleştirmek için aşağıdakileri yapabilirsiniz
#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>...>;
ve aynı işlevi
areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>
( Canlı Demoya Bakın )
Veya daha az yazmak için (yani olmadan decltype
), bir işlev olarak yapın
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
ve sadece
areSameFunctions(funA, funB, funC)
( Canlı Demoya Bakın )