c++ - lambda 可以捕获指向方法的指针吗?

标签 c++ c++11 lambda

如何创建一个捕获指向 C++11 中方法的指针的 lambda?如果我尝试使用 GCC (4.6) 编译器执行此操作,它无法推断出表达式类型。

我尝试过这个:

typedef std::string ( Class::*pointerName ) () const;
pointerName = &Class::method;

auto comparer = [&pointerName] ( Class * pFirst, Class * pSecond )
{
   return ( pFirst->*pointerName ) () < ( pSecond->*pointerName ) ();
}

最佳答案

您将 typedef 的 pointerName 用作变量而不是类型(或者只是忘记命名变量):

typedef std::string ( Class::*pointerName ) () const; // declares a type alias
pointerName ptr = &Class::method;
//          ^^^ a name for your variable of type pointerName

auto comparer = [&ptr] ( Class * pFirst, Class * pSecond )
{
    return ( pFirst->*ptr ) () < ( pSecond->*ptr ) ();
}

(或者直接将 typedef 放入原始代码中)

关于c++ - lambda 可以捕获指向方法的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19713088/

相关文章:

c++ - 我可以只包含一个类的特定成员方法吗?

C++ 和 WINSOCK - 接收两个结构和两个消息

c++ - 如何使用 C++11 原子控制线程生命周期

c# - .NET C# 设置由 lambda 选择器定义的字段的值

java - 在java 8中使用流迭代列表

C++变量的多个定义

c++ - 模板特化和别名模板推导区别

c++ - 整理私有(private)函数的元编程技巧

c++ - pthread_once() 中的竞争条件?

Java 8 通用 LambdaMetafactory?