问题标签 [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 投票
3 回答
3940 浏览

lambda - 用于传递成员函数的 C++0x lambda 包装器与绑定

这基本上是一个关于在类构造函数/方法中创建/传递指向成员方法的函子的两种不同方法的可读性、样式和性能的问题。

方法一:

方法二:

我想知道在这种情况下使用 lambda 是否只是无偿的,在某些方面更容易看到发生了什么,但是你必须显式地提供 arg 类型。我也不喜欢“使用命名空间”;但随后它使绑定表达式不必要地冗长(例如,_1 变为 std::placeholders::_1),并且 lambda 避免了这个问题。

最后我应该注意,就这个问题而言, some_method 是一个可以做很多事情的大函数,直接复制到 lambda 体中会很痛苦。

如果这个问题看起来太模糊,那么我们可以专注于性能差异的答案(如果有的话)。

编辑:一个不平凡的用例。

如您所见,初始化器列表(使用方法 1 或 2 定义)中使用的 CALLBACK_FUNCTOR 使得限定 using 声明(afaik)的范围很困难,显然我们不会费心包装我们打算立即调用的成员方法。

0 投票
3 回答
568 浏览

c++ - 具有私有基数的函数成员指针

以下代码产生编译时错误:

base::print” : 无法访问在类“ base_der”中声明的私有成员

但是,我已经public在派生类中创建了成员。为什么这不起作用?

0 投票
2 回答
706 浏览

c++ - const-正确性和安全的布尔成语

我有另一个与安全布尔成语有关的问题:

bool_type(typedef)和this_type_does_not_support_comparisons是怎么来的const?无论如何,没有人应该通过返回指针实际调用成员函数,对吧?这里有const必要吗?operator bool_type否则(成员函数)会违反 const 正确性吗?

0 投票
2 回答
336 浏览

c++ - C++ 对象函数到函数指针

我在我的 C++ 应用程序中使用了一个 C 库。该库具有具有以下签名的函数:

我正在尝试将函数设置为回调,我希望能够使用以下类成员函数

我不能直接绑定它并基于这里http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.2我有一个可能的解决方案,我会创建一个静态成员来处理回调(因为基于该站点,应该没问题)并添加此类的静态实例以供静态成员调用。

即在BattleScreen中添加以下内容:

像这样在构造函数中绑定它:

并将对象分配给构造函数中的回调目标。

问题是我无法知道我在任何时候都会有多少这样的课程(它会是最小的,但可能大于 1)。我考虑让 callbacktarget 成为 BattleScreen* 的向量,我可以在 TopLevelHandleWebViewCallbacks 中迭代并像这样进行比较:

但这里的问题是我只是在比较 awe_webview 指针,这似乎是一个非常糟糕的主意。该库是封闭源代码,awe_webview 是 C 结构,所以我看不出它们是由什么组成的,以及是否有任何属性可以进行更合适的比较。有没有好的解决方案?

如果我不清楚或者您需要更多信息,请告诉我。

提前致谢

0 投票
2 回答
3050 浏览

c++ - C++:使用带有成员函数的函数指针

我试图将一个函数作为参数传递给另一个函数,它们恰好是同一个类的成员函数。

我遇到了一个奇怪的错误,我无法弄清楚问题是什么。

这是我的功能:

但是,我收到以下错误:

那么给了什么?我觉得我已经尝试了每一种变化来试图让它发挥作用。你甚至可以为成员函数传递函数指针吗?我怎样才能让它工作?

注意:将 functionToPass 设为静态并不是真正有效的选项。

0 投票
4 回答
5363 浏览

c++ - C++ 成员函数指针,boost::signals

我有以下情况,(代码更好)

所以问题是,我如何将“成员函数”指针传递给 Register 方法。还有,这样可以吗?我想要/需要的是某种代表注册系统,所以如果有人能指出我正确的方向,我将不胜感激。提前谢谢。

0 投票
3 回答
756 浏览

c++ - 事件回调守护进程

我正在使用 C++ 中的一个事件守护程序,我想使用成员函数回调。基本上,事件队列将收集守护程序持续服务的事件。有一个带有 ID 的基类 Event 结构,所有事件都将从它派生。我希望为每个事件注册的方法在其签名中使用派生事件类型。

然后守护进程将允许这些类使用它们的“this”指针订阅它们的成员函数。

所以在这门课之外你可以做类似的事情:

并且 EventDaemon 循环将沿着

所以我的问题是如何按事件 ID 将“this”指针和成员函数指针存储在某种数组中。这样我就可以通过使用 e->eventId 和事件类型来查找 'classInstancePtr' 和 'funcPtr' 以及 reinterpret cast。

0 投票
3 回答
692 浏览

c++ - 指向不可访问基中的成员函数的指针

下一个例子的编译:

失败并出现下一个错误:

我知道 A 不是 B 的可访问基础,但我正在使用using关键字。它不应该允许访问函数 foo 吗?

标准中的哪些相关段落阻止了上述内容的编译?

0 投票
3 回答
2165 浏览

c++ - 不允许成员函数的非指针类型定义?

在得到这个问题的答案后,我发现有两种有效的方法来定义函数指针。

我现在更喜欢Function * pPFunction q但显然这不适用于指向成员的函数。考虑这个人为的例子。

但是,如果我将其更改为新的首选样式:typedef void (Base :: Callback) ()并且Callback * cb,我会在以下位置出现编译器错误typedef

成员“回调”的额外资格“基础::”

错误演示

为什么不允许这样做?这仅仅是一个疏忽还是会导致问题?

0 投票
1 回答
5487 浏览

c++ - 使用 libevent 回调成员函数

我正在尝试将一个成员函数传递给应该被视为回调的libevent 。

我可以成功地在 A 类中创建一个指向eventcb的方法指针,并在 A 的实例上调用它(第 20 行)。

此外,在第 22 行传递一个全局函数(就像在 C 中所做的那样)也可以正常工作。

但是,在第 23 行,我尝试将我的方法指针传递给libevent,当我编译它时,我收到以下错误(使用clang编译器)

我究竟做错了什么?