OS XP、VC++6.0
自前のリードメソッドをつくってみたのですが、
basic_stringで定義したバッファをアロケートしてから、CFile::Read()
にわたしたいのですが、assign()しか考え付きません。
値を入れている分、無駄なことしているように思えるのですが、
みなさんは、どうされていますでしょうか?
void CSGARA::Read(LPCTSTR aFileName)
{
CFile wFile(aFileName,CFile::modeRead | CFile::typeBinary) ;
basic_string<UCHAR> wReadBuffer ;
wReadBuffer.assign(0x00,wFile.GetLength()) ;
wFile.Read(&wReadBuffer[0],wFile.GetLength()) ;
wFile.Close( ) ;
}
まずはその assign の使い方合ってるかい?
assign は置換を行うわけで、そういう意味では無駄
resize, reserve っつメンバが存在するけどそっちを使うべきだろう
resize と reserve のどっちが適切かは basic_string の使い方次第
assign にせよ resize にせよ「入るべき値を指定しない」手段は無いわけで
そういう意味ではどっちも無駄だけどさ
reserve は、使い方によっては呼んでも意味が無いかもしれない
バッファ用途には vector のほうが多用されているような気がするが・・・
> 値を入れている分、無駄なことしているように思えるのですが、
> ファイルIOのスピードに比べりゃゴミにもならんので気にしない。
僕ならコンストラクタでサイズ確保。
CFile wFile(aFileName,CFile::modeRead | CFile::typeBinary) ;
basic_string<UCHAR> wReadBuffer(0x00,wFile.GetLength()) ;
その basic_string コンストラクタの使い方間違ってねぇ?
basic_string::basic_string(size_type n, charT c, const allocator& a=A())
だと思うが
いたたたた、逆です。すんません。
tetrapodさん、επιστημηさん、いつもありがとうございます。
あとで、気に入らないと、何度も直すほうなので、
こうゆう、アドバイスは、非常にたすかります。