:しかしC4333(「>>」:あまりにも大きな量だけ右シフト、データの損失)警告回避する方法私は、バッファに任意のサイズの整数に変換するには、以下の機能を持っている
template<typename T>
std::string build_data_from(T val)
{
std::string result;
for (int i = 0; i < sizeof(val); i++)
{
result.insert(0, 1, char(val));
val = val >> 8;
}
return result;
};
を、呼び出しをunsigned char型とテンプレート関数は、Visual C++ 2008で警告をレンダリング:
std::string x(build_data_from<unsigned char>(1));
警告C4333: '>>': 大きすぎた分だけ右シフト、データ損失
それを回避するために(プラグマ警告ディレクティブを使用せずに)任意のクリーンな方法はありますか?
にあなたはunsigned char型のケースのためのテンプレート関数を特化できます。しかしこれはダブルコード化が必要な回避策に過ぎません。 –
bitshift関数だけを抽出して特殊化することもできます。 – UncleBens
@king_nak:実際にはダブルコーディングではなく、 'char'と' unsigned char'に必要なループ/ビットシフトがなく、メソッドがはるかに簡単です。 –