C++17 如何判断类型是否为函子?

C++17 如何判断类型是否为函子?,c++17,c++14,c++,lambda,functor,typetraits,C++17,C++14,C++,Lambda,Functor,Typetraits,在中,我必须匹配函数指针、lambda和函子 但如果我被困住了呢?我是否有一个类型特征,或者我可以写一个匹配所有这些特征的类型特征 我已经尝试过了,但这只适用于函数指针。是的,您可以,std::is\u invocable是一个不需要编译器支持的库函数。您可以从您选择的STL中剥离实现 例如,您可以在以下位置找到\uuu invokable的LLVM实现(其中std::是可调用的转发LLVM STL中的所有逻辑): (我曾考虑将其提取并发布在这里,但对于一篇帖子来说,它似乎太大了。更轻松的是,我

在中,我必须匹配函数指针、lambda和函子

但如果我被困住了呢?我是否有一个类型特征,或者我可以写一个匹配所有这些特征的类型特征


我已经尝试过了,但这只适用于函数指针。

是的,您可以,
std::is\u invocable
是一个不需要编译器支持的库函数。您可以从您选择的STL中剥离实现

例如,您可以在以下位置找到
\uuu invokable
的LLVM实现(其中
std::是可调用的
转发LLVM STL中的所有逻辑):


(我曾考虑将其提取并发布在这里,但对于一篇帖子来说,它似乎太大了。更轻松的是,我发现拼写上的差异-invocable和invokable-很有趣。)

可以使用来检测是否为给定类型定义了
operator()
。我假设您也没有
std::invoke
,并且不会使用指向成员的指针,因此您可以有一个简单的“
是可调用的”
”特征(比其他答案短)