Этот сценарий работает в Visual studio, но не для IAR, при сборке для устройства ARM, я получаю серьезную ошибку.Вот сценарий
enum BlaEnum
{
Bla1,
Bla2
};
template <class T, BlaEnum bla = Bla1>
class A
{
public:
virtual void Foo() = 0;
T att;
BlaEnum bll;
};
class B : public A<int, BlaEnum::Bla2>
{
public:
void Foo() override;
};
int youu = 9;
void B::Foo() {
++youu;
}
int main(void)
{
B b;
A<int>* Base = (A<int>*) &b;
Base1->Foo(); //works for win32 but hard faults when it runs in ARM device
B b2;
A<int,BlaEnum::Bla2>* Base2 = &b2;
Base2->Foo(); //works for both ARM and win32
}
Я определяю шаблоны базового класса Abstract в производном классе.каждый производный класс будет определять константу enum по-своему, и я понимаю, что это создает проблему в том, как реализован динамический полиморфизм для компилятора IAR.
Я заметил, что vtable не может быть создан в устройстве ARM, поскольку vptr указывает на недоступныйместо нахождения.но для win32 vtable встроен просто отлично для обоих случаев.
Вопрос в том, почему именно это вызывает проблемы при сборке на устройстве ARM, но прекрасно работает в win32.