问题标签 [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.

0 投票
4 回答
3176 浏览

c++ - c ++存储指向未知类成员函数的指针

我想存储一个指向对象的指针和一个指向它的已知签名方法的指针。如果我知道该类,则此指针具有类型:

但是,如果我不知道类型,如何存储指针?

我想做这样的事情:

如何存储指向方法的指针methodmyObject稍后调用它?

0 投票
2 回答
330 浏览

delegates - D 类似于 C++ 成员函数指针,不一定是委托

我一直在学习 D,特别是对它的通用编程能力感到非常兴奋。代表很棒,显然他们已经完全取代了成员函数指针,所以当我想实现以下内容时我被卡住了:

根据我对D中的函数指针和委托的了解,它们都不能这样做,因为函数指针只能为全局函数声明,并且委托必须绑定到一个对象,没有“部分委托” “我能找到。如此处所示,我不能使用委托,因为没有单个对象可以绑定到要调用的方法。

我知道我可以用 mixins 来做到这一点,并且基本上使它成为一个宏。但是,这听起来确实不像 D,我认为应该有“正确的方法”

0 投票
1 回答
87 浏览

c - 试图了解如何在迭代反转链表时修改列表

我有以下代码迭代地反转链表。

在代码中,currNode、prevNode 和 nextNode 都是 ReverseListIterative() 的本地指针。为什么原始列表仍然被修改(更准确地说是颠倒了)?我们不应该使用

以便修改列表节点的实际地址?

0 投票
2 回答
1131 浏览

c++ - 类成员函数指针作为类成员

如何调用存储在 fPtr 中的函数?当我尝试 (*(t->fPtr))(); 编译器给出了这些错误:

错误 C2171:“*”:在“void (__thiscall MyClass::*)(void) const 类型的操作数上非法

错误 C2064:术语不计算为采用 0 个参数的函数

0 投票
2 回答
215 浏览

c++ - 指向函数对象的成员函数指针

我有一个函数指针作为成员的类。在某些情况下,我希望该指针指向一个函数对象,这不可能吗?

我得到:

0 投票
3 回答
7342 浏览

c++ - 成员函数指针运行时错误 - ESP 的值未在函数调用中正确保存

在过去的一个小时里,我一直在寻找这个问题的答案,但找不到有效的解决方案。我正在尝试使用函数指针来调用特定对象的非静态成员函数。我的代码编译得很好,但是在运行时我得到一个讨厌的运行时异常,它说:

运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用一种调用约定声明的函数和使用另一种调用约定声明的函数指针的结果。

很多网站说要在方法头中指定调用约定,所以我__cdecl在它前面加了。但是,我的代码在更改后遇到了相同的运行时异常(我也尝试使用其他调用约定)。我不确定为什么我必须首先指定 cdecl,因为我的项目设置设置为 cdecl。我正在使用一些外部库,但在我添加这个函数指针之前这些库工作正常。

我正在关注这个:https ://stackoverflow.com/a/151449

我的代码:

A.cpp

溴化氢

B.cpp

主文件

我正在使用 Visual Studio 2010 运行,但我希望我的代码能够在其他平台上运行,并且只需进行最少的更改。

0 投票
3 回答
810 浏览

c++ - 无法将指向派生类函数的指针传递给基类

我正在尝试将派生类中的函数传递给需要函数指针的基类函数,但出现编译器错误。

我想这是按设计的,但是有没有一种不涉及不愉快的铸造的方法呢?可以boost::bind在这里帮助我吗?

作为旁注,我使用虚函数可以正常工作,这是一种明显的方法,而不是函数指针,但我只是想让它以这种方式工作,然后再尝试一些 boost::bind 技巧......

0 投票
3 回答
1483 浏览

c++ - 将成员函数指针传递给无类函数

在下面的代码中,我想不出一种将成员函数传递给通用根查找器的方法。

我不想让 root-finder 成为成员,因为它不是特定于这个类的,而且让一切static看起来很不优雅的解决方案。有人会有想法吗?这一定是一种常见情况,但我没有找到我也可以理解的相关帖子。

谢谢!

编辑:Pseek实际上,我还想问:除了我所做的之外,是否有一种适当的、线程安全的方式来设置变量?只是为了说清楚:我正在对二维函数进行一维求根,但要修复两个参数之一。

0 投票
1 回答
1530 浏览

c++ - C++11:对 const、volatile、左值引用和右值引用限定的成员函数指针进行抽象?

C++03 允许您将函数参数限定为constvolatile和/或左值引用 ( &)。

C++11 又增加了一个:右值引用 ( &&)。

此外,C++ 允许您根据参数的限定符重载函数,以便在调用函数时选择最合适的重载。

成员函数在概念上可以被认为是一个接受额外参数的函数,其类型是对其所属类的实例的引用。可以像任何其他参数一样重载基于此“额外参数”的限定符的成员函数。这通过将限定符放在函数签名的末尾来表示:

在 C++03 中,constvolatile限定符是可能的,并且 C++11 也允许&&&&理论上在 C++03 中可以允许,但事实并非如此)。

可以使用任何限定符组合,除了&&&是互斥的,这使得 C++03 中的 2^2 = 4 种可能性和 C++11 中的 2^4-4 = 12 种可能性。

当您想使用成员函数指针时,这可能会很痛苦,因为它们在这些限定符中甚至没有一点多态性:this作为参数传递的成员函数指针的“类型”上的限定符必须完全匹配那些关于它被传递的参数的类型。C++ 也没有提供明确的工具来抽象限定符。在 C++03 中,这基本上没问题,因为您必须编写一个const版本和一个非const版本,而没有人关心volatile,但是在 C++11 中的病态情况下(这并不像病态那样罕见)您可能不得不手动编写多达 12 个重载。每个功能。

我很高兴地发现,如果您将封闭类的类型作为模板参数传递并从中派生成员函数指针的类型,则允许constvolatile限定符如您所期望的那样传播:

这比手动写出所有案例要好得多。

不幸的是,它似乎不适用于&and &&

GCC 4.7 说:

错误:形成指向引用类型“Baz&&”的指针</p>

但这并不奇怪,因为 4.7 的 GCC 还不支持this.

我还尝试了 Clang 3.0,它确实有这样的支持:

错误:成员指针指向非类类型 'Baz &&'

那好吧。

我是否认为这是不可能的,并且无法在this type成员函数指针的 " " 上抽象出引用限定符,这是否正确?this除了在特定情况下将“this类型”作为模板参数传递时,任何其他用于抽象限定符(尤其是 on )的技术也将不胜感激。

(值得指出的是,如果 C++ 不区分成员函数和普通函数,这一切都是微不足道的:您将使用模板形参作为函数(指针)的形参类型,而模板形参将按原样通过,限定符完好无损,无需额外考虑。)

0 投票
5 回答
1501 浏览

c++ - 指向未指定类类型的成员函数指针 - 可能吗?

是否可以声明一个函数指针(非 C++ 11)可以指向任何类的成员函数(阅读:不是特定的类)?

例如,如果我有 A、B 和 C 类。C 在其中声明了一个函数指针,我想在指向 B 的成员函数之一和 A 的成员函数之一之间切换该指针。C++ 允许这样做吗?