如果有某种通用版本,我会喜欢的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()
我认为当编译器可以一般地推断出读取的大小时,我必须告诉它是愚蠢的。
有没有更好的办法?