Answers:
其他人提到了使用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)
(请参见现场演示)
另一个未提及的可能性:您可以使用typeid
from typeinfo
和==
:
#include <typeinfo>
if(typeid(funA) != typeid(funB))
std::cerr << "Types not the same" << std::endl;
error: non-constant condition for static assertion
。
constexpr
。我现在有一个更好的例子。