Перелопатил кучу сайтов.
Есть два метода создания и работы с объектами в С.
1) По факту от функций ничем не отличается. Просто функции в аргументе постоянно передается адрес структуры которую теперь именуют объектом. В общем фигня.
2) Более менее похожий на C++
Заголовочный файл
Код
void os_crit_method_set(void* _this);
void os_crit_method_release(void* _this);
typedef void (*crit_fn_set)(void*);
typedef void (*crit_fn_release)(void*);
typedef struct{
char state;
crit_fn_set set;
crit_fn_release release;
}CriticalSection;
void CriticalSection_new(void* _this);
Описание методов
Код
void os_crit_method_set(void* _this)
{
CriticalSection *cs=_this;
cs->state=__get_interrupt_state();
__disable_interrupt();
}
void os_crit_method_release(void* _this)
{
CriticalSection *cs=_this;
__set_interrupt_state(cs->state);
}
void CriticalSection_new(void* _this)
{
CriticalSection *cs=_this;
cs->state=0;
cs->set=os_crit_method_set;
cs->release=os_crit_method_release;
}
Использование
Код
CriticalSection cs; CriticalSection_new(&cs);
cs.set(&cs);
Можно сделать через "=" но тогда компилятор делает прошивку на 26 байт больше.
ЗЫ:
Можно сделать так
Код
CriticalSection CriticalSection_new()//void* _this)
{
CriticalSection cs;//*cs=_this;
cs.state=0;
cs.set=os_crit_method_set;
cs.release=os_crit_method_release;
return cs;
}
И использование
Код
CriticalSection cs=CriticalSection_new();
cs.set(&cs);
CriticalSection cs1=CriticalSection_new();
cs1.set(&cs1);
Дает немного хуже код. Зато привычно выглядит.