У меня есть код, который работает во встроенной системе, и он должен работать очень быстро. Я знаю 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()...), но это сойдет. Кроме того, простите мою неясность.
огромное спасибо,
do_X()
на самом деле представляют собой пользовательский код. - person Georg Fritzsche   schedule 14.07.2010