【问题标题】:How to get this pointer from std::function?如何从 std::function 获取这个指针?
【发布时间】:2013-04-02 01:31:04
【问题描述】:

由于std::function 可以保存成员函数,所以它必须在某处存储指向对象实例的指针。

如何从包含成员函数的std::function 中获取this 指针?

【问题讨论】:

标签: c++ this std-function this-pointer


【解决方案1】:

std::function 类型的对象拥有一个可调用对象。指向成员函数的指针是一种可调用对象;可以使用适当的类类型的参数以及它需要的任何其他参数来调用它。例如:

struct S {
    void f(int);
};
std::function<void(S, int)> g(&S::f);

要调用它,请传递S 类型的对象:

S s;
g(s, 3);

注意std::function 对象确实持有S 对象;只有当你调用它时,函数指针才会绑定到一个对象。

【讨论】:

  • 我的目标是将我作为 std::function 传递给另一个函数的 lambdas 展开。那我该怎么做呢?通过展开,我的意思是将其拆分为 this 指针和使用 std::function::target 的静态函数指针以进行进一步处理。
  • @danijar:你为什么不把你的目标放在你的问题中呢?你的问题毫无意义。
  • @danijar 您可以创建自己的函数对象,该对象绑定 this 指针并允许检索。
  • @danijar 如果是静态函数,则没有绑定对象实例。
  • 当我将 lambda 表达式存储为 std::function 时,this 指针已经绑定了吗?
猜你喜欢
  • 1970-01-01
  • 2015-06-02
  • 2020-12-18
  • 2021-01-07
  • 2020-04-28
  • 2015-03-09
  • 2016-02-25
  • 1970-01-01
  • 2014-02-11
相关资源
最近更新 更多