今回は前回の逆で、バイナリファイルから変数を読み込みます。実際にはバイナリファイルというよりバイナリストリームからの読み込みになります。ファイルから読み込む場合はstd::fstreamなどを使えばいいでしょう。
0 1 2 3 4 5 6 7 8 9 10 |
template <typename T, class Traits> requires std::is_trivially_copyable_v<T> bool read_var(T& var, std::basic_istream<char, Traits>& istr) { auto p = std::addressof(var); auto n = sizeof(var); istr.read(const_cast<char*>(reinterpret_cast<char volatile*>(p)), n); return istr.good(); } |
使用するストロームは必ずバイナリーモードでオープンしてください。テキストモードを使うと環境によっては破綻します。