问题标签 [member-function-pointers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - boost::bind & boost::function 指向重载或模板化成员函数的指针
我有一个回调机制,涉及的类有:
首先,此代码无法编译,它是一个插图。
模板的使用使我的示例复杂化,但我将它们留在里面是因为它影响了我的问题。在我看来,我的订阅需要模板化,因为连接器类不知道它处理多少事件类型。当我尝试创建一个:
我尝试将 OnEvent 创建为具有特化的模板函数,但似乎编译器将我的 OnEvent 函数视为重载而不是模板特化,否则如果我尝试将模板特化显式声明为
我可以得到以下编译:
编译、运行和工作。
才不是。我认为这是因为我没有正确指定重载函数的地址。
现在已经向泰迪熊解释了所有这些 - 我认为我的问题是“如何正确创建指向重载或模板化成员函数的函数指针并将 this 指针绑定到它?”
c++ - 如何调用指向成员函数的指针?
我收到一个我不明白的编译错误(MS VS 2008)。在搞砸了几个小时之后,一切都变得模糊了,我觉得我错过了一些非常明显(而且非常愚蠢)的东西。这是基本代码:
编译器在箭头处声称“术语不评估为采用 1 个参数的函数”。为什么不?PFN 的原型是一个接受一个参数的函数,MAP_ENTRY.pfn 是一个 PFN。我在这里想念什么?
c++ - 如何定义一个通用的成员函数指针
我创建了一个 Timer 类,它必须在计时器到期时调用回调方法。目前我让它与普通函数指针一起工作(它们被声明为 void (*)(void),当 Elapsed 事件发生时,函数指针被调用。
是否可以使用也具有签名 void (AnyClass::*)(void) 的成员函数做同样的事情?
谢谢小伙伴。
编辑:此代码必须在 Windows 和实时操作系统(VxWorks)上工作,所以不使用外部库会很棒。
EDIT2:可以肯定的是,我需要的是有一个 Timer 类,它在没有参数的“AnyClass.AnyMethod”的构造函数中接受一个参数并返回 void。我必须存储这个参数,后者在代码的一个点中只执行这个变量指向的方法。希望是明确的。
c++ - 如何获取函数中定义的本地类的成员函数地址(C++)
我正在尝试执行以下操作:从函数中本地定义的类中获取成员函数的地址。
尝试 #2 和 #3 完全混淆 GCC,它不知道我要做什么。Try #1 会生成一条更有用的错误消息,指出不存在 setupCallback,其形式为“setupCallback(void (SomeUnitTest::someTest()::NestedClass::SomeFunction::*), etc) 这就是 try #3 的诞生方式。
我真的找不到很多关于函数内部定义的类的信息,有没有人知道正确的语法,并且可能有讨论这个主题的资源?
好的,看来这已经解决了,正如两位发帖人所指出的,本地类没有链接,它不能工作。现在知道了这一点,我发现这篇文章讨论了这个问题,对于遇到这个问题并偶然发现这个问题的任何人:http: //www.informit.com/guides/content.aspx? g=cplusplus&seqNum=420
编辑:setupCallback() 的说明,使用更常规的类的工作示例
编辑#2:更新措辞以将“嵌套”更改为“本地”。为 setupCallback 添加了更多详细信息。
编辑#3:添加了更多信息的链接。谢谢大家。
c++ - 用于提升多索引容器的模板化成员函数
因此,我有一个 boost 多索引容器。
正如你所看到的,通过这种设计,我用来创建这个容器的每个对象都必须有一个成员函数,返回一个名为“name”的字符串。
这显然不理想。我尝试了几种传递“密钥”的方法,但我无法让它们中的任何一个工作..
我试过这个..
但没有快乐..
编译器抱怨 Object::name 不是类型,但我不知道如何纠正这个问题。即使我知道如何为模板提供类型,我仍然需要容器使用“Object::name”的具体实例。
也许我必须在构造时先提交类型,然后再提交成员函数?但是我该如何构建容器..我的头疼!?!
下面的 Alexy 好心地提供了这个解决方案
但是,这产生了以下编译器错误。
在标记的行..
行。事实证明这是我的错,因为我提交了一个签名不正确的“&Object::name”参数……我已经解决了这个问题……
c++ - 带有接受派生类参数的基类参数的成员函数指针
所以我正在学习这个事件管理课程。我正在存储指向签名成员函数的指针列表,void (Event*)
其中 Event 只是目前存储一些随机数据的结构。
我想知道,我是否可以派生不同版本的事件,并将指向这些成员函数的指针传递给这个类?目前我正在尝试这个。
这给了我 XCode 中的以下错误。
错误:没有匹配的函数调用“
EventManager::RegisterEventHandler(const char [9], void (HelloWorld::*)(MouseEvent*), HelloWorld*&)
”
你知道我如何安全地传递一个指针,该指针在其函数签名中期望派生类吗?谢谢。
c++ - 从成员函数模板化参数调用成员函数
鉴于以下我无法编译的代码。
我收到以下错误消息
我以为我在使用 .* 但我显然有问题。
如何调用成员函数?
我试过了
这些都没有奏效。
c++ - 在 C++ 中更改成员函数的地址
在 C++ 中,我可以通过获取成员函数的地址轻松创建函数指针。但是,是否可以更改该本地函数的地址?
即说我在同一个类中有funcA() 和funcB(),定义不同。我希望将 funcA() 的地址更改为 funcB() 的地址,这样在运行时调用 funcA() 实际上会导致调用 funcB()。我知道这很丑陋,但我需要这样做,谢谢!
编辑 - - - - -
我正在尝试做的事情的背景:
我希望为现有代码库实现单元测试,我的所有模块都继承的基类中的一些方法是非虚拟的。我不允许编辑任何生产代码。我可以摆弄构建过程并在基类中替换相关方法设置为虚拟,但我认为我宁愿使用这样的 hack(我认为这是可能的)。
另外,出于技术上的好奇心,我对这个话题很感兴趣,因为通过尝试解决这个问题的过程,我学到了很多关于代码生成和函数查找等事情的底层工作原理,其中我刚读完大学二年级,还没有机会在学校学习。我不确定我是否会在学校里学到这样的东西,因为我在计算机工程专业而不是 CS 专业。
返回主题 funcA() 和 funcB() 方法确实具有相同的签名,所以问题是我只能使用 & 运算符获取函数的地址?我是否正确地说我不能更改函数的地址,或者在不破坏部分内存的情况下换出该地址的内容?如果将函数导出到 dll,那么 DLL 注入对于这种情况会是一种好方法吗?
c++ - 将成员函数指针传递给C++中的成员对象
我在使用 C++ 中的函数指针时遇到问题。这是我的例子:
编译器在以下位置返回错误testFoo.myBar.funcP = &testFoo.hello;
:
ISO C++ 禁止使用绑定成员函数的地址来形成指向成员函数的指针。说“&foo::你好”
无法在赋值中将'void (foo:: )()' 转换为 'void ( )()'
所以我这样尝试:
但是现在编译器又增加了一个:
'foo' 尚未声明
有没有办法让它工作?
提前感谢您的建议
c++ - 如何从另一个方法调用指向方法的指针
我前段时间遇到过这个问题,我放弃了,但最近又回来了。
我在标记行出现错误:
我将非常感谢您的帮助。今天有一个类似的问题,部分帮助了我:link。但这似乎不是我问题的完整答案。
实际上这两个问题只有一个区别-调用函数的点。
谢谢你的时间