Итак, я хочу иметь кла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)
- Форум Валится на throw (2005)
- Форум Поиогите разобраться с вложенными namespace'ами (2004)
- Форум Как правильно реализовать конструктор родителя внутри наследника? (2015)
- Форум нужна помощь в переводе кода из c++ в python3 (2018)
- Форум Qt Creator. Кто как предпочитает подключать *.ui ? (2010)
- Форум [shared_ptr] не работает или я кривой? (2011)
- Форум qt наследование от QGraphicsRectItem (2013)