Orang lain telah menyebutkan solusi menggunakan std::is_same
dan decltype
.
Sekarang untuk menggeneralisasi perbandingan untuk sejumlah tanda tangan fungsi sewenang-wenang, Anda dapat melakukan hal berikut
#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>...>;
dan bandingkan sebanyak mungkin fungsi
areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>
( Lihat Demo Langsung )
Atau untuk kurang mengetik (mis. Tanpa decltype
), jadikan itu sebagai fungsi
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
dan telepon hanya dengan
areSameFunctions(funA, funB, funC)
( Lihat Demo Langsung )