Всем доброй ночи, сейчас попробую объяснить чего хочу добиться. Есть класс в котором функции выполняются асинхронно, в связи с этим хочу организовать очередь выполнения ф-ций, накидал такой пример
| Код | class Core { public: Core(); private: void test_1(); void test_2(); std::vector<void (Core::*)()> queue; void addQueue(void (Core::*)());
void check_queue(); };
Core::Core(){ addQueue(test_1); addQueue(test_2); }
void Core::test_1() { std::cout << "Core::test_1" << std::endl; }
void Core::test_2() { std::cout << "Core::test_2" << std::endl; }
void Core::check_queue() { if (queue.size() > 0) { queue.at(0)(); queue.erase(queue.begin()); check_queqe(); } }
void Core::addQueue(void (Core::*v)()) { queue.insert(queue.end(),v); }
int main(int argc, char *argv[]) { Core *c = new Core(); }
|
компилятор выдает три ошибки с которыми я уже и не знаю как бороться.
| Код | main.cpp:23:20: error: no matching function for call to 'Core::addQueue(<unresolved overloaded function type>)' main.cpp:17:14: note: candidate is: void Core::addQueue(void (Core::*)()) main.cpp:24:20: error: no matching function for call to 'Core::addQueue(<unresolved overloaded function type>)' main.cpp:17:14: note: candidate is: void Core::addQueue(void (Core::*)()) main.cpp: In member function 'void Core::check_queue()': main.cpp:41:21: error: must use '.*' or '->*' to call pointer-to-member function in '((Core*)this)->Core::queue.std::vector<_Tp, _Alloc>::at [with _Tp = void (Core::*)(), _Alloc = std::allocator<void (Core::*)()>, std::vector<_Tp, _Alloc>::reference = void (Core::*&)(), std::vector::size_type = unsigned int](0u) (...)', e.g. '(... ->* ((Core*)this)->Core::queue.std::vector<_Tp, _Alloc>::at [with _Tp = void (Core::*)(), _Alloc = std::allocator<void (Core::*)()>, std::vector<_Tp, _Alloc>::reference = void (Core::*&)(), std::vector::size_type = unsigned int](0u)) (...)' main.cpp: In function 'int main(int, char**)':
|
что самое интересное если это реализовывать вне класса то все отрабатывает хорошо, подскажите как с этим бороться. |