Я завершаю реализацию ВМ (часть АЛУ) добавлением операций в Сопроцессор. В этом смысле я ищу дизайн C++.
С помощью шаблона виртуальная машина создается двумя способами: первый, при котором манипуляции с памятью являются прямыми (uint8_t*). Контролируемая секунда (MemoryProtect)
uint8_t mem[3] = {11,22,33};
VM vmr(mem);
VM vmp(mem);
После создания экземпляра виртуальная машина манипулирует своей памятью с помощью функций, не являющихся членами, таких как:
template inline T readPointer(uint8_t *mem) { return *reinterpret_cast(mem); }
template inline T readPointer(const ByteRef &b)
MemoryProtect использует ByteRef. Но я не хочу подробно описывать эту часть.
Мой вопрос: как заставить класс Copro манипулировать памятью виртуальной машины, не зная ее типа и не выполняя приведение или вызов виртуального метода в функции exec Copro? Функция exec — это функция с очень горячим циклом. Итак, это сильное ограничение. В идеале хотелось бы сделать так, чтобы весь этот бардак расширялся пользователями. Поэтому априори исключите любое решение по разрешению во время компиляции.
Я не в восторге от того, чтобы сделать Copro шаблонным классом. Может быть, я слишком многого прошу?
Вот исходный код, который я добровольно упростил. Спасибо.
#include
#include
class MemoryProtect {
public:
uint8_t *m_a;
};
void read(const uint8_t* c, const uint8_t offset) { std::cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... efficientl