อื่น ๆ ได้กล่าวถึงวิธีการแก้ปัญหาโดยใช้และ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)
( ดูการสาธิตสด )