C++ c++;指向函数的指针

C++ c++;指向函数的指针,c++,class,function-pointers,C++,Class,Function Pointers,我正在制作一个类按钮哪个构造函数正在获取指向函数的指针,以便在单击时执行。有没有简单的方法来定义我想给它的函数?无名氏。。例如,当我创建按钮时,只需打开作用域并编写没有特殊名称的函数。因为我必须创建许多按钮,我不想为每个按钮编写一个函数,并使用它自己的名称..(名称冲突等) 例如,如下java代码: someObject.addMyListener(new MyListener() { public void processEvent(MyEvent e) { // How do y

我正在制作一个
类按钮哪个构造函数正在获取指向函数的指针,以便在单击时执行。有没有简单的方法来定义我想给它的函数?无名氏。。例如,当我创建按钮时,只需打开作用域并编写没有特殊名称的函数。因为我必须创建许多按钮,我不想为每个按钮编写一个函数,并使用它自己的名称..(名称冲突等)

例如,如下java代码:

someObject.addMyListener(new MyListener() {
  public void processEvent(MyEvent e) {
    // How do you access the variable outerClassField?
  }
});
也许我错了,但我们在原地编写
MyListener
函数,没有任何特殊名称或预定义


<> P> C++ C++ 11引入了lambdas,它是能够捕获变量的匿名函数。
请参阅我们的常见问题解答:

C++11引入了lambdas,它是能够捕获变量的匿名函数


请参阅我们的常见问题解答:

在Button类中有一个虚拟函数,并在派生类中重写它。对于要生成的每种类型的按钮,创建一个从Button派生的新类,并使用其自己的OnClick函数实现


这就是面向对象语言的全部要点。

在Button类中有一个虚拟函数,并在派生类中重写它。对于要生成的每种类型的按钮,创建一个从Button派生的新类,并使用其自己的OnClick函数实现


这就是面向对象语言的全部要点。

使用
std::function
(如果编译器还没有包含TR1,则使用Boost实现)。它可以设置为任何可以使用
thing()

调用的使用
std::function
(如果您的编译器还没有包含TR1,则可以使用Boost实现)。它可以被设置为<强>任何< <强> >,可以使用<代码> thuth[](/Cuff>)调用.< /p> < p> java风格的匿名类(这就是你在例子中所做的)可能类似于lambda函数,但是如果你使用最新的C++标准(谷歌“C++ 11”),只需要查看一下。 如果您不使用C++11,则可以将指针传递给未在类中定义的函数或静态方法。永远不要传递指向非静态方法的指针,因为如果不小心,可能会导致一些严重的问题

但一般来说,你也不想这样做。就像其他人已经说过的那样,只需创建一个类并传递指向该类的指针即可。这基本上就是您在Java示例中所做的,只是您在内联进行


<> P>一个很好的东西,就是C++,你可以在一个源文件中定义一个类,如果你不想它是公共接口的一部分,你可以把它保留在头文件中。

java风格的匿名类(你在例子中所做的)可能类似于lambda函数,但是,如果你使用最新的C++标准(谷歌“C++ 11”),就值得研究。 如果您不使用C++11,则可以将指针传递给未在类中定义的函数或静态方法。永远不要传递指向非静态方法的指针,因为如果不小心,可能会导致一些严重的问题

但一般来说,你也不想这样做。就像其他人已经说过的那样,只需创建一个类并传递指向该类的指针即可。这基本上就是您在Java示例中所做的,只是您在内联进行



<> P> C++ C++的一个优点是,你可以在一个源文件中定义一个类,如果你不希望它成为公共接口的一部分,你可以将它保留在头文件之外。作为对所有问题的一般评论——在使用C++时,不要尝试用java方式解决问题。你有严重的设计问题,这就是为什么你总是被卡住的原因。@littledv不知道这是什么。。使用VisualStudio2010Express。什么样的设计问题?@Valdp-这里有一个指向c++0x编译器支持列表的链接。根据矩阵,MSVC10应支持lambda@Vladp:设计问题是您试图使用一种语言(Java)的方法来解决另一种语言(C++)的问题。语言不同,最佳实践也不同。@Evan Teran和littleadv你们都错了。首先我在想我需要什么,然后我记得java中也有类似的东西,所以我写了这个例子让你们理解我的意思。。如果你认为你了解我的想法,那么祝你好运:D!!顺便说一句,谢谢你投票否决了任何人!您正在使用c++0x吗?作为对所有问题的一般评论——在使用C++时,不要尝试用java方式解决问题。你有严重的设计问题,这就是为什么你总是被卡住的原因。@littledv不知道这是什么。。使用VisualStudio2010Express。什么样的设计问题?@Valdp-这里有一个指向c++0x编译器支持列表的链接。根据矩阵,MSVC10应支持lambda@Vladp:设计问题是您试图使用一种语言(Java)的方法来解决另一种语言(C++)的问题。语言不同,最佳实践也不同。@Evan Teran和littleadv你们都错了。首先我在想我需要什么,然后我记得java中也有类似的东西,所以我写了这个例子让你们理解我的意思。。如果你认为你了解我的想法,那么祝你好运:D!!顺便说一句,谢谢你投票否决了任何人!我当然不想为每个按钮写一个完整的类。。我正在创建包含函数指针的button对象。@vladp整个类就是这个函数。无论如何你都得写,那有什么问题吗?@Vladp我想你应该看看Ben Voigt提供的关于Lambda表达式的常见问题解答。你是否为每个按钮创建了不同的函数?你需要一个构造函数/析构函数吗?@David Schwartz我想。按钮的位置是b