我有一个运行在嵌入式系统上的代码,它必须运行得非常快。我知道C和宏,这个特定的项目主要用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()调用。我无法使这种方法奏效。当我使用#warning语句时,当前状态的值始终为STATE_A。这不是我的问题,但如果你能帮助我,我会倍感高兴。所以,我的问题是,有没有办法使用模板而不是宏来做这种事情?
更多信息:我必须使用内联函数,因为我无法导出MEMORY [],这是一个库函数。我真的不喜欢修改函数原型(如read_memory()...),但它会做。另外,请原谅我的默默无闻。
千恩万谢,
为什么你想使用模板来做到这一点? – 2010-07-13 20:09:35
这就是我可以想到的编译时决策,因为我不想在运行时决定。但我很开放。 – perreal 2010-07-13 20:17:05
好的,是什么让你认为运行时决策太慢?你有没有介绍过这样的事情?我们都希望我们的代码运行“非常快”,99.99%的时间正是它所做的,而无需使用宏或模板。 – 2010-07-13 20:26:04