如何在gcc中设置自动优化模板函数的代码?

时间:2015-04-21 04:11:34

标签: c++ gcc

我想知道模板优化。看一下示例代码:

....
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;
   ....
}

问题是:number1number2number3中的所有三个始终使用AReallyBigFunction<long>给出正确的结果,但我不想注意到模板参数long并且我不想将不必要的程序大小相乘,gcc / g ++能做到吗?

修改

AReallyBigFunction<T>的大小等于每个class T的MB。因此,如果使用三种不同的整数类型调用AReallyBigFunction,则总大小为3 * MB。如果我始终致电AReallyBigFunction<long>(模板参数class T已指定为long),则大小为MB。我希望编译器始终调用AReallyBigFunction<long>,尽管我只是编写AReallyBigFunction(未指定class T,包含任何整数值(shortint或{{1} }))。我的问题是:gcc / g ++有没有任何解决方案(编译模式)来回应我?

1 个答案:

答案 0 :(得分:2)

如果@DrewDormann的评论是对问题的正确解释,那么您可以使用以下技巧来减少代码大小。

定义采用intshort的函数重载,并使用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);
}