我想知道模板优化。看一下示例代码:
....
template <class T>
T AReallyBigFunction(T); //size = a (MB)
....
int main(){
....
short number1;
int number2;
long number3;
cout << AReallyBigFunction(number1) << endl;
cout << AReallyBigFunction(number2) << endl;
cout << AReallyBigFunction(number3) << endl;
....
}
问题是:number1
,number2
和number3
中的所有三个始终使用AReallyBigFunction<long>
给出正确的结果,但我不想注意到模板参数long
并且我不想将不必要的程序大小相乘,gcc / g ++能做到吗?
修改
AReallyBigFunction<T>
的大小等于每个class T
的MB。因此,如果使用三种不同的整数类型调用AReallyBigFunction
,则总大小为3 * MB。如果我始终致电AReallyBigFunction<long>
(模板参数class T
已指定为long
),则大小为MB。我希望编译器始终调用AReallyBigFunction<long>
,尽管我只是编写AReallyBigFunction
(未指定class T
,包含任何整数值(short
,int
或{{1} }))。我的问题是:gcc / g ++有没有任何解决方案(编译模式)来回应我?
答案 0 :(得分:2)
如果@DrewDormann的评论是对问题的正确解释,那么您可以使用以下技巧来减少代码大小。
定义采用int
和short
的函数重载,并使用long
调用函数模板。
int AReallyBigFunction(int in)
{
long res = AReallyBigFunction<long>(in);
return static_cast<int>(res);
}
short AReallyBigFunction(short in)
{
long res = AReallyBigFunction<long>(in);
return static_cast<short>(res);
}