如何在此给定代码中翻译 ::* 运算符和 member_fn?
How to translate ::* operator and member_fn in this given code?
据我所知:void (A::*p)() = &A::test_func;
表示p
是一个指向成员函数void A::test_func()
的指针,而std::mem_fn(...)
可以用来包装一个指向a的指针成员函数。
但在下面的代码片段中,我无法翻译 void (Handler::*)()
和 Handler::*member_fn
的意思。
class Handler;
std::pair<boost::shared_ptr<Handler>, void (Handler::*)()> cb = job_queue.sync_pop();
void (Handler::*member_fn)() = cb.second;
(cb.first.get()->*member_fn)();
class Handler;
std::pair< // a pair consisting of first and second
boost::shared_ptr<Handler>, // first - a shared pointer to Handler object
void (Handler::*)()> // second - a pointer to the member function of Handler class
cb = job_queue.sync_pop(); // sync_pop() returns such pair, stores it in cb variable
// varaible "member_fn" stores pointer to a member function from the pair
void (Handler::*member_fn)() = cb.second;
// cb.first.get()-> - dereference pointer to Handler object, say handlerObj
// *member_fn - dereference the pointer to member function
// (cb.first.get()->.*member_fn())() - invoke the function stored in member_fn variable
// on handlerObj (just like handlerObj.member_fn();)
(cb.first.get()->*member_fn)();
这会更具可读性:
auto pair = job_queue.sync_pop();
auto function = std::bind(pair.second, pair.first.get());
function();
这正是您在第一段中所描述的意思:
// cb contains a shared pointer to an instance of Handler and a member function of Hander
std::pair<boost::shared_ptr<Handler>, void (Handler::*)()> cb = job_queue.sync_pop();
// assign the member function stored in cb.second to a local variable
void (Handler::*member_fn)() = cb.second;
(cb.first.get()->*member_fn)(); // call the function stored in member_fn on
// the object held by cb.first
如果这不够干净,您可以找到一个使用标准库 类 HERE 的最小示例,它做同样的事情
据我所知:void (A::*p)() = &A::test_func;
表示p
是一个指向成员函数void A::test_func()
的指针,而std::mem_fn(...)
可以用来包装一个指向a的指针成员函数。
但在下面的代码片段中,我无法翻译 void (Handler::*)()
和 Handler::*member_fn
的意思。
class Handler;
std::pair<boost::shared_ptr<Handler>, void (Handler::*)()> cb = job_queue.sync_pop();
void (Handler::*member_fn)() = cb.second;
(cb.first.get()->*member_fn)();
class Handler;
std::pair< // a pair consisting of first and second
boost::shared_ptr<Handler>, // first - a shared pointer to Handler object
void (Handler::*)()> // second - a pointer to the member function of Handler class
cb = job_queue.sync_pop(); // sync_pop() returns such pair, stores it in cb variable
// varaible "member_fn" stores pointer to a member function from the pair
void (Handler::*member_fn)() = cb.second;
// cb.first.get()-> - dereference pointer to Handler object, say handlerObj
// *member_fn - dereference the pointer to member function
// (cb.first.get()->.*member_fn())() - invoke the function stored in member_fn variable
// on handlerObj (just like handlerObj.member_fn();)
(cb.first.get()->*member_fn)();
这会更具可读性:
auto pair = job_queue.sync_pop();
auto function = std::bind(pair.second, pair.first.get());
function();
这正是您在第一段中所描述的意思:
// cb contains a shared pointer to an instance of Handler and a member function of Hander
std::pair<boost::shared_ptr<Handler>, void (Handler::*)()> cb = job_queue.sync_pop();
// assign the member function stored in cb.second to a local variable
void (Handler::*member_fn)() = cb.second;
(cb.first.get()->*member_fn)(); // call the function stored in member_fn on
// the object held by cb.first
如果这不够干净,您可以找到一个使用标准库 类 HERE 的最小示例,它做同样的事情