鉴于我有一个功能
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);
//...
但是,鉴于我的编译器不够智能,无法展开,该如何处理模板?
您可以尝试执行以下操作:
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] );
}
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句