Вы также можете использовать between
:
df[df.some_date.between(start_date, end_date)]
Это происходит потому, что вы применяете один объект m_execute
к другому объекту.
Исправьте это, изменив эту строку
(m_b->*m_execute)();
// ^^^^^^^^^
// Points to your m_execute, not m_b's
на это:
(m_b->*m_b->m_execute)();
Еще лучше добавить функцию-член для запуска собственного выполнения и вызвать его из B::find
:
void find() {
run_my_execute();
m_b->run_my_execute();
}
void run_my_execute() {
(this->*m_execute)();
}
Это позволило бы избежать путаницы, по которой указатель должен быть применен к какому объекту.
m_b
, ноm_execute
. Синтаксис вызова указателя на функцию-член через указатель объекта -(ptr->*pmf)(...)
. В этом случае указатель на функцию-член принадлежитm_b
, поэтому вам нужно сообщить компилятору, что:(ptr->*(m_b->pmf))(...)
. Поскольку->
имеет более высокий приоритет, чем->*
, дополнительные параны не нужны. Для васptr
естьm_b
, аpmf
-m_execute
. – chris 13 July 2018 в 18:56init
получает доступ кm_execute
членам на двух отдельных объектах - свой вm_execute = someFunc
иm_b
вm_b->m_execute = otherFunc
. У вашей функцииfind()
есть доступ к обоим этим членам, поэтому необходимо указать, какой из них он хочет вызвать. – dasblinkenlight 13 July 2018 в 19:18