例如,我有以下模板函數:當給定默認模板參數時,將選擇什麼模板值?
template<class IntType = typename boost::uintmax_t>
IntType someFunnyFunc(IntType x, IntType y, IntType z) { ... }
現在我有以下代碼:
int main() {
short a=1, b=2, c=3;
someFunnyFunc(a, b, c);
return 0;
}
將所有的編譯器生成的函數
boost::uintmax_t someFunnyFunc(boost::uintmax_t x, boost::uintmax_t y, boost::uintmax_t z) { ... }
,因爲短CAN被轉換爲boost :: uintmax_t,或者一些編譯器會生成
short someFunnyFunc(short x, short y, short z) {...}
我需要這個,因爲我的算法使用一個循環,循環更頻繁,當我使用短整數而不是大整數時。
您可能會問,爲什麼我不簡單地自己定義boost::uintmax_t someFunnyFunc(boost::uintmax_tx, boost::uintmax_t y, boost::uintmax_tz) { ... }
並且完成它。 我這樣做,因爲我想使自定義的整數類型成爲可能,例如可以使用plattform不直接支持的更大的整數。
編輯: 難道這解決了我的問題:
template<class IntType>
IntType someFunnyFunc(IntType x, IntType y, IntType z) { ... }
boost::uintmax_t someFunnyFunc(boost::uintmax_t x, boost::uintmax_t y, boost::uintmax_t z) {
return someFunnyFunc<boost::uintmax_t>(x, y, z);
}