鉴于我有一个功能
double doSomething(int const a, int const b, int const c) { /*...*/}
我想为不同的输入a,b和c测试这个函数。然后,我可以给出一个包含可能参数的列表,并用三个循环测试所有组合:
int aTest[] = {1,2,3,4}
int bTest[] = {-5,-3,0}
int cTest[] = {2,65,8,0,-100}
for (unsigned int i = 0; i < 4; ++i) {
for (unsigned int j = 0; j < 3; ++j) {
for (unsinged int k = 0; k < 5; ++k) {
double val = doSomething(aTest[i], bTest[j], cTest[k]);
//Compare results etc.
}
}
}
编译器希望足够智能在编译时展开这些循环,以便生成类似的东西:
doSomething(1,-5,2);
doSomething(1,-5,65);
doSomething(1,-5,8);
//...
但是,鉴于我的编译器不够智能,无法进行展开,我将如何处理模板?
答案 0 :(得分:1)
您可以尝试这样做:
double TestData[] = { 1.5, 2.7, 3.6, 4.5, 7.9 };
template<int K>
class Super {
public:
inline static void Do()
{
Super<K - 1>::Do();
double val = doSomething( TestData[K] );
}
};
template<>
class Super<0> {
public:
inline static void Do()
{
double val = doSomething( TestData[0] );
}
};