У меня есть код, который работает во встроенной системе, и он должен работать очень быстро.Я знаю C и макросы, и этот конкретный проект в основном написан на C, но он также использует шаблоны C ++ [все больше и больше].Существует встроенная функция:
inline my_t read_memory(uint32 addr) {
#if (CURRENT_STATE & OPTIMIZE_BITMAP)
return readOptimized(addr);
#else
return MEMORY[addr];
#endif
}
Эта функция считывает данные из памяти оптимизированным или традиционным способом на основе текущего состояния и растрового изображения, которое указывает, следует ли использовать оптимизацию в определенном состоянии.
#define STATE_A 0x0001
#define STATE_B 0x0010
#define STATE_C 0x0100
#define STATE_D 0x1000
#define OPTIMIZE_BITMAP 0x1010 // optimize states d and b
и в процессе выполнения (хорошо, компиляция) я попытался переопределить CURRENT_STATE следующим образом:
int main(){
#define CURRENT_STATE STATE_A
do_a();
#undef CURRENT_STATE
#define CURRENT_STATE STATE_B
do_b();
....
}
Все функции do_X () делают вызовы read_memory ().Я не мог заставить этот подход работать.Значение текущего состояния всегда STATE_A, как я вижу, когда использую операторы #warning.Это не мой вопрос, хотя, если вы поможете мне с этим, я буду счастлив вдвойне.Итак, мой вопрос: есть ли способ сделать это, используя шаблоны вместо макросов?
Еще немного информации: мне нужно использовать встроенную функцию, потому что я не могу экспортировать MEMORY [], и этобиблиотечная функция.Я действительно предпочитаю не изменять прототип функции (например, read_memory () ...), но это подойдет.Кроме того, простите мою безвестность.
большое спасибо,