Những người khác đã đề cập đến giải pháp sử dụng std::is_same
và decltype
.
Bây giờ để tổng quát hóa việc so sánh cho một số chữ ký hàm tùy ý, bạn có thể làm như sau
#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>...>;
và so sánh nhiều chức năng như một
areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>
( Xem bản demo trực tiếp )
Hoặc để gõ ít hơn (nghĩa là không có decltype
), hãy biến nó thành một hàm
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
và gọi đơn giản bằng cách
areSameFunctions(funA, funB, funC)
( Xem bản demo trực tiếp )