下面D::foo
通过指向成员函数调用函数的方法会产生错误:必须使用.*
或->*
调用'f(...)'中的指向成员函数的指针
..当然这不是我们调用指针的方式-成员函数。
正确的调用方式是(d.*f)(5);
OR(p->*f)(5);
我的问题是,'有没有办法在左侧没有类对象的情况下调用类的成员函数?我想知道我们是否可以将类对象 ( this
) 作为常规参数传递?
在我看来,归根结底(在汇编/二进制级别)一个类的所有成员函数都是正常函数,它们应该对 n + 1 个参数进行操作,其中 (+1 是this
)
如果我们在下面讨论D::foo
函数,在汇编/二进制级别它应该对两个参数进行操作:
- 类对象本身(指向 D 类对象的指针称为
this
) - 和
int
.
那么,有没有办法(或hack)将D::foo
类对象作为函数参数传递给它而不是. or -> or .* or ->*
在类对象上使用运算符?
示例代码:
#include <iostream>
using namespace std;
class D {
public:
void foo ( int a ) {
cout << "D" << endl;
}
int data;
};
//typedef void __cdecl ( D::* Func)(int);
typedef void ( D::* Func)(int);
int main ( void )
{
D d;
Func f = &D::foo;
f(&d, 5);
return 1;
}
一种方法是使用增强绑定,即
(boost:: bind (&D::foo, &d, 5)) ();
编辑:“请注意,我不是在寻找这个程序的有效版本,我知道如何让它工作”