Я в надежде найти подсказку (желательно хорошим примером) для осуществления динамической диспетчеризации в С.Динамическая отправка в С использованием виртуальной таблицы метод
Я учусь C и как показывает практика, я хочу перевести с Java на C, используя таблицу виртуальных методов динамической отправки.
, например, у меня есть код Java:
abstract class Foo {
public abstract int val();
public abstract Boolean error();
}
class Fail extends Foo {
public int val(){ return 0;}
public Boolean error(){return true;}
}
class IntFoo extends Foo {
int v;
public IntFoo(int value){this.value=v;}
public int val(){ return v;}
public Boolean error(){return False;}
}
и я мог бы просто перевести некоторые базовые вещи, как это:
typedef struct Foo{
void(**vtable);
}Foo;
typedef struct Fail{
void(**vtable);
struct Foo inherited;
}Fail;
typedef struct IntFoo{
void(**vtable);
struct Foo inherited;
}IntFoo;
Я застрял при попытке выполнить это, потому что я не :
- Как определить эти методы в c.
- Задайте адрес этих методов в
vtable
, чтобы компилятор распознал правильный метод вызова. - Что еще нужно определить, чтобы заставить его работать.
Вместо того, чтобы пытаться скрутить круглую привязку в квадратное отверстие - чтобы попытаться заставить структуру ООП на языке, отличном от ООП, я бы использовал C++, а не C для этого. –
@HovercraftFullOfEels Я ищу, чтобы сделать это в c только, как меня просят сделать мой профессор. – Solix
* Источник * для этого материала [ooc.pdf] (http://www.cs.rit.edu/~ats/books/ooc.pdf) [Axel Tobias Schreiner] (http: // www .cs.rit.edu/~ ATS/книги /). –