c++ - 我如何判断类型是否为仿函数?

标签 c++ lambda c++14 functor typetraits

<分区>

我有 is_invocable匹配函数指针、lambda 和仿函数。

但是如果我被困在 上怎么办? ?我有类型特征吗,或者我可以写一个匹配所有这些的类型特征吗?

我试过了 is_function但这只适用于函数指针。

最佳答案

是的,std::is_invocable 是一个不需要编译器支持的库函数。您可以从您选择的 STL 中提取实现。

例如,您可以在此处找到 __invokable 的 LLVM 实现(std::is_invocable 将 LLVM 的 STL 中的所有逻辑转发给它):https://android.googlesource.com/platform/ndk/+/5b3a49bdbd08775d0e6f9727221fe98946f6db44/sources/cxx-stl/llvm-libc++/libcxx/include/type_traits

(我正在考虑将其提取出来并张贴在这里,但它似乎对于一个帖子来说太大了。在一个更轻松的笔记中,我发现拼写上的差异 - invocable 与 invokable - 有趣。)

关于c++ - 我如何判断类型是否为仿函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55836024/

相关文章:

c++ - static/dynamic/const/reinterpret_cast 可以在未评估的上下文中使用吗?

c++ - 未使用 '...' 扩展的参数包

c++ - 为什么编译器提示使用未声明的标识符 'f1'

c++ - 创建接收参数的新异常

c++ - 配置工厂构建的对象的正确模式

java - 如何避免在此 Java lambda 表达式代码中出现 NullPointerException 警告?

c# - 为什么包含异步 lambda 的方法本身不需要是异步的?

使用 Integer.max 作为比较器的 Java 8 Lambdas max()

c++ - 双向链表 std::unique_ptr 类在删除节点时无法按预期工作

c++ - CUDA,使用2D和3D阵列