Итак, я хочу иметь клаcc op_table, содержащий таблицу указателей на функцию. Я определяю тип typedef void (op_table::* op_func) (); После этого я наследую от op_table новый класс pyxis_op_table, который уже будет содержать конкретные фунекции. Но через указатель на метод op_table я не могу вызывать методы производного класса. Объясните 1. Как работают указатели на члены класса; 2. Почему не работает мой код; 3. Как сделать то, что я хочу грамотно. (... - пропущенный код) cat op_table.hxx #ifndef __op_table_hxx #define __op_table_hxx #include "../runtime.hxx" namespace engine_stuff { struct op_table_exception { enum op_table_exception_type { index_out_of_range } type; op_table_exception (op_table_exception_type t): type (t) {} }; class op_table { public: typedef int op_index; typedef void (op_table::* op_func) (); private: runtime * rt; protected: op_func * op_tbl; int size; public: op_table (runtime & r); virtual ~op_table (); void op (int index); }; }; #endif //__op_table_hxx cat op_table.cc #include "op_table.hxx" engine_stuff::op_table::op_table (runtime & r): rt (&r) {} engine_stuff::op_table::~op_table () {} void engine_stuff::op_table::op (int index) { if (index < 0 || index >= size) throw op_table_exception (op_table_exception::index_out_of_range); (this->*op_tbl[index]) (); } cat pyxis_op_table.hxx #ifndef __pyxis_op_table #define __pyxis_op_table #include "op_table.hxx" namespace engine_stuff { class pyxis_op_table: op_table { public: ... static const int op_push_const; ... private: ... void push_const (); ... public: pyxis_op_table (runtime & r); virtual ~pyxis_op_table (); }; }; #endif // __pyxis_op_table cat pyxis_op_table.cc #include "pyxis_op_table.hxx" const int engine_stuff::pyxis_op_table::op_push_const = 9; void push_const () { ... } engine_stuff::pyxis_op_table::pyxis_op_table (runtime & r): op_table (r) { op_tbl = new op_func[...]; ... op_tbl[op_push_const] = pyxis_op_table::push_const; ... } engine_stuff::pyxis_op_table::~pyxis_op_table () { delete [] op_tbl; }
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от no-dashi
Ответ на:
комментарий
от carrot
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Проблема с ALSA (2010)
- Форум Проблемма с инклудами!!! (2005)
- Форум C++ template linker error (2015)
- Форум Поиогите разобраться с вложенными namespace'ами (2004)
- Форум нужна помощь в переводе кода из c++ в python3 (2018)
- Форум Qt Creator. Кто как предпочитает подключать *.ui ? (2010)
- Форум [shared_ptr] не работает или я кривой? (2011)
- Форум Как правильно реализовать конструктор родителя внутри наследника? (2015)
- Форум [c++] Объектный интерфейс плагинов (2011)
- Форум const поля однократной инициализации в классе и оптимизация (2022)