[C++]
C++のイディオム
書籍などを読んで、便利だとは思いつつ忘れがちなソースコードの書き方をまとめる
レガシーなC APIからデータを受け取る
元ネタはなんだっけ、思い出せない
case
// unsigned charのポインタの配列とか使うときあるけど、だるいのでvectorに格納したりする std::vector<unsigned char> buffer; // こう書くと、bufferの先頭のポインタを指すのと似たようなものになる // (…だけどポインタと違ってSTLのpush_backやremoveなどの関数が使える) &buffer[0];
wxWidgets混じりのexample
// レガシーなC APIからデータを受け取る std::vector<unsigned char> buffer; // 更新場所のストリームを開く wxTextFile modifFile(datFilePath); modifFile.Open(wxConvUTF8); // ストリームを受け取るループ部分 while (!stream->Eof()) { // vectorに値渡し stream->Read(&buffer[0], buffer.size()); buffer.resize(buffer.size()); modifFile.AddLine(wxString::FromUTF8(reinterpret_cast<const char*>(&buffer[0]), TEXT_ENDLINE_TYPE)); }
配列の初期化
配列を初期化する際の覚書き
参考:http://akademeia.info/index.php?C%B8%C0%B8%EC%2F%CA%B8%CB%A1%2F%CA%B8%BB%FA%CE%F3#n78b10cf
case1
char[20] test; // C言語型の配列 strcpy(test, ""); // このコードは、空文字列、即ちヌル文字だけで構成される文字列をstrにコピーする。つまり、str[0]に'\0'が格納されるので、配列strは空文字列になり、クリアに成功している。
case2
char[20] test; // C言語型の配列 test[0] = '\0';
case3
char[20] test = {}; // C言語型の配列、これはOK test = {} ; // error: assigning to an array from an initializer list、よってNG std::initializer_list<char> test2; // ナウでヤングなC++erはこう書く test2 = {};