是否可以检查两个函数是否具有相同的签名?例如:
int funA (int a, int b);
int funB (int a, int b);
float funC (int a, int b);
int funD (float a, int b);
在此示例中,funA
和funB
是应返回true
的功能的唯一组合。
基本上,您想检查两个函数的类型是否相同:
std::is_same_v<decltype(funA), decltype(funB)>
我不会将其称为“比较签名”,因为如果我没记错的话,返回类型不是签名的一部分(因为它不影响重载解析)。
其他人提到使用std::is_same_v<decltype(funA), decltype(funB)> // true
和LIVE的解决方案。
现在可以对任意数量的功能签名进行比较,您可以执行以下操作
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>...>;
}
)