たとえば、次のテンプレート関数があります。
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) { ... }
、shortは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) { ... }
自分自身を定義してそれで終わらせないのかと尋ねるかもしれません。これを行うのは、プラットフォームで直接サポートされていないより大きな整数を使用できるように、カスタム整数型を使用できるようにするためです。
編集: これは私の問題を解決できますか:
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);
}