我想重构以下代码:
enum Mode { None, Value1, Value2 }
template <Mode mode>
bool func() {
if (mode == None) {
helperNone();
return funcImplNone();
} else if (mode == Value1) {
helper1();
return funcImplValue1();
} else if (mode == Value2) {
helper2();
return funcImplValue2();
}
return true;
}
因为表达式
mode == None
在编译时计算。而且他的代码不会导致代码膨胀(可执行文件中的代码重复(吗?
我正在考虑以下重构:
template<Mode>
bool func() {
return true;
}
template<>
bool func<None>() {
return true;
}
template<>
bool func<Value1>() {
helper1();
return funcImplValue2();
}
template<>
bool func<Value2>() {
helper2();
return funcImplValue2();
}
还有其他标准方法来重构它吗?我们是否保证编译器会优化代码本身?重构后的代码看起来不是更清晰吗?
这里的重构没有什么意义,因为它无论如何都在优化。例如,下面的代码只产生对 funcImpl(( 的一个调用;
enum Mode { None, Other };
bool funcImpl();
template <Mode mode>
bool func() {
if (mode != None)
return funcImpl();
return true;
}
void test()
{
volatile auto a = func<None>();
a = func<Other>();
}
结果是
test():
sub rsp, 24
mov BYTE PTR [rsp+15], 1
call funcImpl()
mov BYTE PTR [rsp+15], al
add rsp, 24
ret
https://godbolt.org/z/V5Uxig