Я пытаюсь написать Приостановка Service Routine в C++, вот некоторый фрагмент кодаКак сгенерировать функцию во время выполнения?
void handlerProxy(int intrNo) {}
typedef void(*IntrHandler)();
IntrHandler IDT[256];
Я хочу, чтобы инициализировать IDT
в время выполнения или во время компиляции, как это:
for (size_t i = 0; i < 256; ++i) {
// It doesn't compile
IDT[i] = std::bind(handlerProxy, i);
// or
IDT[i] = [i]() {handlerProxy(i);};
}
проблема в том,
- лямбда-функция захвата не может быть преобразован в указатель на функцию
- Мой код будет скомпилирован с
-fno-rtti
, такstd::function::target
не доступен
Есть ли возможность мне удастся это сделать? Я не хочу писать IDT[0]= ... IDT[1]=...
вручную или использовать другую программу для ее создания. Макро и встроенный asm разрешены. Тип IDT
может быть изменен, однако элемент IDT
должен быть адресом функции, что означает, что что-то вроде jmp IDT[0]
должно быть действительным.
Будет ли исключение типа 'IDT []' a 'sturct' с перегрузкой оператора функции (объект функции) не может быть и речи? – Galik
@Galik В этом случае 'jmp IDT [0]' не будет работать. BIOS вызывает эти функции только с помощью 'push' регистров и флагов и' jmp' по адресу –