我正在测试各种优化的组合,为此我需要一个静态如果,如http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Static-If-I-Had-a-Hammer中所述启用并禁用特定优化。if(const-expr) 并不总是有效,因为某些优化涉及更改数据布局,而这不能在函数范围内完成。
基本上我想要的是这样的:
template<bool enable_optimization>
class Algo{
struct Foo{
int a;
if(enable_optimization){
int b;
}
void bar(){
if(enable_optimization){
b = 0;
}
}
};
};
(是的,在我的情况下,从数据布局中删除 b 的较小内存占用是相关的。)
目前我正在使用非常糟糕的黑客来伪造它。我正在寻找一种更好的方法来做到这一点。
档案啊
#ifndef A_H
#define A_H
template<class enable_optimization>
class Algo;
#include "b.h"
#endif
文件 bh(此文件由 Python 脚本自动生成)
#define ENABLE_OPTIMIZATION 0
#include "c.h"
#undef
#define ENABLE_OPTIMIZATION 1
#include "c.h"
#undef
文件通道
template<>
class Algo<ENABLE_OPTIMIZATION>{
struct Foo{
int a;
#if ENABLE_OPTIMIZATION
int b;
#endif
void bar(){
#if ENABLE_OPTIMIZATION
b = 0;
#endif
}
};
};
有谁知道这样做的更好方法?理论上它可以使用模板元编程来完成,起初我使用它。至少我使用它的方式很痛苦,并导致完全不可读和臃肿的代码。使用上面的 hack 可以显着提高生产力。
编辑:我有几个优化标志,它们相互作用。