类
A
有一个模板成员函数A::runImpl
。函数 A::run
根据 A::m_case
的值调用专门的实现,该值在类构造函数中设置。
在我的项目中,
run
函数被调用的非常频繁。如果可以消除其中的分支,它将加速 5% 以上。是否有任何模板用法可以做到这一点?
我的项目是由 GCC 7.3.1 和 C++14 编译的。
#include <iostream>
#include <cstdlib>
#include <cassert>
using namespace std;
class A {
public:
A (uint32_t * arr, size_t len) : m_case(0) {
for (size_t i = 0; i < len; ++i) {
m_case += arr[i];
}
}
template <size_t> void runImpl() { assert(0); };
void run();
private:
size_t m_case;
};
template <>
inline void A::runImpl<0>() {
cout << "Default execution path." << endl;
}
template <>
inline void A::runImpl<1>() {
cout << "Optimized execution path 1." << endl;
}
template <>
inline void A::runImpl<2>() {
cout << "Optimized execution path 2." << endl;
}
void A::run() {
switch (m_case) {
case 1:
runImpl<1>();
break;
case 2:
runImpl<2>();
break;
default:
runImpl<0>();
break;
}
}
int main() {
uint32_t arr[] = {1, 1};
A a(arr, 2);
a.run();
return 0;
}