の何らかの汎用バージョンがあればいいのにと思いますstd::istream::read
ので、これを行うことができます:
ClassA func( std::istream& is ) {
ClassA a;
is.read(a);
return a;
}
また
ClassA func( std::istream& is ) {
return is.read<ClassA>();
}
または多分:
ClassA::ClassA( std::istream& is ) {
is.read(data_member);
}
しかし、私は常に次のように独自の一般的な定義を補足する必要があります。
template< class T >
void load( T& v, std::istream& is ) {
is.read((char*)&v, sizeof(v));
};
template< class T >
T load( std::istream& is ) {
T v;
is.read((char*)&v, sizeof(v));
return v;
};
これを行う際に、ストリーム オブジェクトのメソッドである必要があると思われる場合は、ストリームをパラメーターとして提供する必要があります。
load(a.data_member, is);
// vs
is.read(a.data_member);
この問題について間違って考えているのではないか、あるいは、このようなことを望むのはばかげているのではないかと感じています。read()
コンパイラが一般的に推測できるときに、読み取りのサイズについて教えなければならないのはばかげていると思います。
より良い方法はありますか?