C++ 通过指向类成员的指针调用函数
在以下代码中:C++ 通过指向类成员的指针调用函数,c++,member-pointers,C++,Member Pointers,在以下代码中: class foo { public: void foo_function() {}; }; class bar { public: foo foo_member; void bar_function(foo bar::*p_foo) { // what is the corrct sintax for following: this->*p_foo->foo_function(); // expre
class foo
{
public:
void foo_function() {};
};
class bar
{
public:
foo foo_member;
void bar_function(foo bar::*p_foo)
{
// what is the corrct sintax for following:
this->*p_foo->foo_function(); // expression must have a pointer type??
}
};
int main()
{
foo foo_obj;
bar bar_obj;
typedef foo bar::*p_foo;
p_foo blah = &bar::foo_member;
bar_obj.bar_function(blah);
return 0;
}
什么是正确的语法才能使bar::bar\u函数起作用?这在以下情况下起作用:
这都是关于有正确的间接层次。由于
p\u foo
是一个指向成员的指针,因此在尝试从此访问它之前,我们需要取消对它的引用。此时,您拥有实际的foo_成员
对象,而不是指向它的指针,因此您可以通过点符号调用其foo_函数。优先级和类型不匹配:((this->*p_foo.foo函数)()
你能给我们更多关于语法错误的信息吗?@codekiddyp_foo blah=&bar::foo_member
您认为&bar::foo_member
实际上以何种方式提供了一个成员函数指针?@codekiddy似乎在读者的眼中:-P但肯定void bar_function(foo bar::*P_foo)
需要一个成员函数指针。那么你怎么能说我们不是在讨论成员函数指针呢?它需要一个成员指针foo
是一个类,而不是函数指针typedef。
void bar_function(foo bar::*p_foo)
{
(this->*p_foo).foo_function();
}