Доброго времени суток.
Есть серйозный вопрос к спецам по программированию в С++.
Некоторый код нужно чтобы был одновременно под два разных направления, то есть в одном случае он используется по Borland C builder в качестве DLL, а в другом случае используется для Mega2560. Код приведен ниже:
class class_a
{
private:
int FInternalCount;
public:
class_a();
#ifdef _WIN32
void (__closure * fptr)(void); // Borland C Builder'a
#else
// для микроконтроллера не знаю что написать
//???
#endif
virtual void Check(void);
};
class class_b
{
private:
class_a * ca;
public:
class_b();
virtual void func_b(void);
virtual void RunClassA(void);
};
class class_c
{
private:
class_a * ca;
public:
class_c();
virtual void func_c(void);
virtual void RunClassA(void);
};
class_a::class_a()
{
fptr = 0x0000;
FInternalCount = 0;
}
void class_a::Check(void)
{
// тут тоже не знаю как это написать для микроконтроллера -
// проверка что обработчик назначен и вызов его
if ((fptr) && (FInternalCount++ == 50))
{
FInternalCount = 0;
fptr();
}
}
class_b::class_b()
{
ca = new class_a();
ca-›fptr = func_b; // назначение обаботчика некоторого события дла class_b
}
void class_b::func_b()
{
// обработчик события класса class_b
}
void class_b::RunClassA()
{
ca-›Check();
}
class_c::class_c()
{
ca = new class_a();
ca-›fptr = func_c; // назначение обаботчика некоторого события дла class_c
}
void class_c::func_c()
{
// обработчик события класса class_c
}
void class_c::RunClassA()
{
ca-›Check();
}
class_b * cb;
class_c * cc;
void main()
{
cb = new class_b();
cc = new class_c();
while (1)
{
cb-›RunClassA();
cc-›RunClassA();
}
}
Уже целую неделю бьюся над кодом
![Бьюсь об стену](images/smilies/icon_obstenu.gif)
...
Отсюда следует вопрос как это переписать для IAR? Кто что может посоветовать?