Итак, я хочу иметь кла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)