我想知道模板優化。看看示例代碼:如何設置自動優化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;
....
}
的問題是:所有三個number1
,number2
和number3
總是給出正確的結果與AReallyBigFunction<long>
,但我不希望通知模板參數long
,我不想要繁殖不必要的程序大小,gcc/g ++可以做到嗎?
EDIT的AReallyBigFunction<T>
大小等於一個MB用於每個class T
。所以,如果用三種不同的整數類型調用AReallyBigFunction
,總大小爲3 * aMB。如果我總是呼叫AReallyBigFunction<long>
(模板參數class T
已指定爲long
),則大小爲MB。我希望編譯器始終調用AReallyBigFunction<long>
,儘管我只寫AReallyBigFunction
(沒有指定class T
,帶有任何整數值(short
,int
或long
))。我的問題是:gcc/g ++是否有解決方案(編譯模式)來響應我?
我不明白你的問題。 –
我想我明白這一點。編譯器可以實現'int'和'long'作爲等價類型。而且你問如果鏈接器碰巧產生相同的機器碼,鏈接器是否爲它們保留單獨的函數? –
如果你說'AReallyBigFunction'可以用'long'參數實現一次,並且當'int'和'short'被提升爲'long'來進行調用時給出正確的結果,那麼就讓你的模板類繼承自一個非模板庫,並實現'AReallyBigFunction'(以及任何其他不依賴於模板參數的方法)。 –