結局size_tって何?


よく出てくるsize_tって結局何なのか.

調べてみたらヘッダで定義されていて,size_of()が返す型らしい(定義?).

size_tが保障しているのはunsigned integerのみで,サイズは実装依存


でもfread()とかfwrite()にも使われているんだよね.


複数のファイルを一つのファイルにまとめるパッケージャを作っているけど,size_tはやっかいだなぁ.

fread()とかを呼ぶ時は256以上の長さのデータを扱う場合は,一回で書き込めない可能性が発生するってことか?

その辺はうまくラップクラスを作ればいいのか.


typedef /* unsigned 64bit integer */ int64_t;


struct c_style_file {
  int64_t write(void* ptr, size_t elm_size, int64_t length);
  // ...
private:
  FILE* fp_;
};


int64_t c_stle_file::write(void* ptr, size_t elm_size, int64_t length){

  int64_t len = 0; // 書込み済みサイズ
  size_t ret = 0;

  while(len == length){
    // ret = fwrite();
    // if(失敗) return len; // 強い保障はできないけど
    // len += ret;
  }

  return len;

}


でもfwrite()関数

size_t fwrite(void*, size_t, size_t, FILE*);

第三引数にint64_t型を渡すとsize_tに入らない分が捨てられちゃうよね.

size_t型の最大値を取得できたらなぁ.


std::numeric_limits::max()かw

ぁー出た出たw


http://boost.cppll.jp/HEAD/more/int_const_guidelines.htm

こちらのページによると,ヘッダは直接includeしてはいけないらしい.

#include (文章が古かったからかな?)
#include

が推奨される,とのこと.


できればFILE*は使わないでライブラリを使いたいけど(std::fstreamとかboost::filesystem::fstreamとか),windowsだと改行文字の関係(だと思う)で変になる.

デフォルトではFILE*をラップしたc_style_fileにしようかな.