トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

C++のイディオム

このエントリーをはてなブックマークに追加

[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 = {}; 

お名前: コメント: