调用指向传递到函数的成员函数的指针
Call a pointer to a member function passed into a function
>我正在将指向成员函数的指针传递到模板函数中。像这样的东西,
Foo bar; /* bar.baz(...) is a function */
auto pnt = bar.baz;
passMmbFunc<...,decltype(pnt)>(...,pnt);
passMmbFunc
的相关部分看起来像这样,
template <..., typename D>
void map(..., D func) {
...
auto ret = func(someVal);
...
}
我假设调用指向成员函数的指针的语法与指向函数的常规指针相同,但事实并非如此。我收到以下错误,
error: must use '.*' or '->*' to call pointer-to-member function in 'func (...)', e.g. '(... ->* func) (...)'
从passMmbFunc
内部,我将如何称呼pnt?我知道如果你手边有相应类的对象,可以调用指向成员函数的指针。但是由于我将其作为参数传递,因此情况并非如此。那么,如果你只有一个指针而没有对象,那么是否可以调用指向成员函数的指针?
必须在对象上调用指向成员的指针函数 - 它不能作为独立函数工作。因此你的错误。 必须使用 .*
或 ->*
语法以某种Foo
调用baz
:
auto ptr_to_mem = &Foo::baz;
Foo f, *pf;
ptr_to_mem(); // error
(f.*ptr_to_mem)(); // ok
(pf->*ptr_to_mem()); // ok
在 C++ 中执行此操作的方法是将指向成员的指针与将用于调用它的对象绑定。该标准甚至提供了一个功能来做到这一点: std::bind
:
auto pnt = std::bind(&Foo::baz, bar);
pnt(); // this is the equivalent of bar.baz();
一个可能的混淆来源是,auto pnt = bar.baz;
实际上会在Python中做你想要的。只是不C++。
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针