転送エラーの場合
1747 ワード
1.forwardは初期化リストをサポートしない、あるいはforwardは複数のパラメータの集合を導くことができない.
2.一部のコンパイラはstatic const valに対する態度が直接置き換えられ、例えばstatic const val=7である.では、関数Func(val)についてはFunc(7)に等しい.しかし、未定義のstatic const valがテンプレートに入力forwardされると、予知できないエラーが発生する可能性がある.forwardの関数ポインタを試してみると、その関数がリロードされると、テンプレートがどのポインタを入力か分からないため、エラーが発生します.もちろん、わがままを言って、リロードされた関数ポインタを渡さなければならない場合は、別名.4を入力したほうがいいです.最後にforwardが失敗するのは、ビットドメインが関数のパラメータとして使用される場合です.
ここに一つ
h.totalLengthを直接転送するならいいです.しかし、T&&を関数パラメータとするテンプレート関数に先にパラメータとして渡す場合は別であり、h.totalLengthは非常量ビットドメイン(non-const bitfiled)であり、関数パラメータは参照である.下位層では、機械的に参照とポインタを見るのは実際には区別がないため、参照やポインタを用いて任意のバイナリコードをバインドすることはできない.したがって、ビットドメインをバインドするポインタは存在しない.はい、では、私がわがままで、ビットドメインを転送しなければならない場合は、どうすればいいですか?答えは簡単です.移行すれば、問題は解決します.
まとめ:forwardはすごいですが、万能ではありません.テンプレートタイプの推定に失敗したり、導出タイプが正しくない場合もエラーが発生します.幸いなことに、間違いは極めて少なく、制御可能であり、以上のいくつかの状況をしっかり覚えて注意すれば、forwardの穴に飛び込むことはない.みそにする
2.一部のコンパイラはstatic const valに対する態度が直接置き換えられ、例えばstatic const val=7である.では、関数Func(val)についてはFunc(7)に等しい.しかし、未定義のstatic const valがテンプレートに入力forwardされると、予知できないエラーが発生する可能性がある.forwardの関数ポインタを試してみると、その関数がリロードされると、テンプレートがどのポインタを入力か分からないため、エラーが発生します.もちろん、わがままを言って、リロードされた関数ポインタを渡さなければならない場合は、別名.4を入力したほうがいいです.最後にforwardが失敗するのは、ビットドメインが関数のパラメータとして使用される場合です.
struct IPv4Header{
std::uint_t version : 4
, IHL : 4
, DSCP : 6
, ECN : 2
, totalLength : 16;
...
};
ここに一つ
IPv4Header h;
h.totalLengthを直接転送するならいいです.しかし、T&&を関数パラメータとするテンプレート関数に先にパラメータとして渡す場合は別であり、h.totalLengthは非常量ビットドメイン(non-const bitfiled)であり、関数パラメータは参照である.下位層では、機械的に参照とポインタを見るのは実際には区別がないため、参照やポインタを用いて任意のバイナリコードをバインドすることはできない.したがって、ビットドメインをバインドするポインタは存在しない.はい、では、私がわがままで、ビットドメインを転送しなければならない場合は、どうすればいいですか?答えは簡単です.移行すれば、問題は解決します.
//
auto length = static_cast<std::uint16_t>(h.totalLength);
まとめ:forwardはすごいですが、万能ではありません.テンプレートタイプの推定に失敗したり、導出タイプが正しくない場合もエラーが発生します.幸いなことに、間違いは極めて少なく、制御可能であり、以上のいくつかの状況をしっかり覚えて注意すれば、forwardの穴に飛び込むことはない.みそにする