如果我有这样的功能:
void Func(T a)
{
T b, c, d;
for (uint i = 0; i < 10000; ++i)
{
b = Call1(a);
c = Call2(b);
d = Call3(c);
}
}
我基本上只想让函数看起来像form:
void Func(T a)
{
T d;
for (uint i = 0; i < 10000; ++i)
d = Call(a);
}
其中Call
是这样的:
T Call(T a)
{
T b, c;
b = Call1(a);
c = Call2(b);
d = Call3(c);
return d;
}
Call
每次在循环中调用时都必须重新初始化b
和c
吗?我是否应该在static T b, c
?
Call function
答案 0 :(得分:5)
你问:
每次在循环中调用时,调用是否必须重新初始化b和c?
答案是肯定的。
你问:
我是否应该在Call函数中使用静态T b,c?
答案是,很可能不是。
如果您担心创建T
实例的成本,可以使用以下方法优化函数:
T Call(T a)
{
return Call3(Call2(Call1(a)));
}
答案 1 :(得分:1)
我将向您展示一个更广泛的问题解决方案。 Herb Sutter 在书More Exceptional C++
中有一个关于如何模拟嵌套函数的精彩章节:
template <class T> class F {
private:
//T retval; // if you need Func to return
//here you can have members that simulate local variables in the original Func
// T x, y, z;
// the nested function(s)
void Call(a) {
T b, c;
b = Call1(a);
c = Call2(b);
d = Call3(c);
// ... = x;
return d;
}
public:
int F(T a) { // original function Func, now a consturctor
T d;
//x = ...
for (uint i = 0; i < 10000; ++i)
d = Call(a);
// if you need the original function to return:
// retval = ...;
}
// if the original function needs to return:
T operator()() const {
return retval;
}
};