其他人提到了使用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)>
(See Live Demo)
或者为了减少打字(即没有decltype),将其作为一个函数
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
简单地调用
areSameFunctions(funA, funB, funC)
(See Live Demo)