[英]Call a member function pointer
如何调用分配给成员函数的成员函数指针? 我正在学习回调,这只是出于学习目的。 如何调用m_ptr函数?
class Test{
public:
void (Test::*m_ptr)(void) = nullptr;
void foo()
{
std::cout << "Hello foo" << std::endl;
}
};
void (Test::*f_ptr)(void) = nullptr;
int main()
{
Test t;
f_ptr = &Test::foo;
(t.*f_ptr)();
t.m_ptr = &Test::foo;
// t.Test::m_ptr(); //Does not work
// t.m_ptr(); //Does not work
// (t.*m_ptr)(); //Does not work
return 0;
}
你快到了 回想一下m_ptr
本身就是数据成员,因此,要访问它,您需要告诉编译器将其与持有该成员指针的实例的关系解析。 这样称呼它:
(t.*t.m_ptr)();
// ^^ this was missing
如果您有C ++ 17,也可以
std::invoke(t.m_ptr, t);
运算符.*
要求在表达式的右侧返回一个指向class-type成员的指针,在左侧的表达式返回该类型的对象(即t
)。 但是您的指针是成员,所以正确的表达式应该是t.m_ptr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.