タグ

関連タグで絞り込む (265)

タグの絞り込みを解除

c++に関するtyruのブックマーク (593)

  • Smart Pointer Programming Techniques - 1.44.0

    Boost C++ Libraries ...one of the most highly regarded and expertly designed C++ library projects in the world. — Herb Sutter and Andrei Alexandrescu, C++ Coding Standards Using incomplete classes for implementation hiding The "Pimpl" idiom Using abstract classes for implementation hiding Preventing delete px.get() Using a shared_ptr to hold a pointer to an array Encapsulating allocation details,

  • Boost.勉強会#3で適当なことをしゃべってきました - デ-mk6

    私の発表資料: http://www.slideshare.net/digitalghost/preprocesstime-lambda-expression ソース: http://patch-tag.com/r/digitalghost/pplambda/home , http://sites.google.com/site/ilikemanaka/code/pplambda.tar.bz2 あぁどうしよう。今回は大阪開催なので旅程がなくて書くことがないのであった。終わり。 などというだけではあんまりなので、まぁ千里中央の地形はやばいですね。前にも第一回GC勉強会のときに行きましたが、会場の建物に入るまでやっぱり迷いました。地上なのにぐぐる地図が役に立たないというすばらしい地形ですね。あと誰も御堂筋線が地下鉄だと信じてくれないのですが、一つ誤解があって、御堂筋線は新大阪以北だと江坂まで

    Boost.勉強会#3で適当なことをしゃべってきました - デ-mk6
  • C++でnode.jsのaddonを書いてみた - tail -f bongole.current.log

    addonを書く上で必要なことは基ここに書いてあるんだけど今のバージョン(v0.23)だと若干便利マクロが増えてるみたい。 今回は渡された文字列とカウンタを表示するだけの簡単なクラスを作った。 JavaScriptのmoduleで書くとこんな感じ function Echo(){ this.i = 0 } Echo.prototype.print = function(s){ console.log( s + ' ' + this.i ); this.i++; } exports.Echo = Echo;同じことをC++のaddonで書くと以下のような感じ ※重要そうなところはコメントで。 echo.h: #ifndef _ECHO_ #define _ECHO_ #include <node.h> #include <v8.h> using namespace v8; using na

    C++でnode.jsのaddonを書いてみた - tail -f bongole.current.log
  • C++で例外を使ったプログラムをうまく書くにはどうすればいいのか - 射撃しつつ前転 改

    C++とはできるだけ離れた人生を送りたいと願ってきた。しかし、なかなかそうもいかず、最近はだんだんとC++の知識を学びつつある。今更C++を勉強するなんてちょっと出遅れすぎてるんじゃないかという気もするが、もうすぐ新規格であるC++0xもリリースされるはずであるし、意外とC++を学ぶにはいいタイミングかもしれない。 プログラムの品質はエラー処理をどこまで丁寧に書くかで決まる。エラー処理の書き方には、 エラーコードを返す(エラーコードを返せるように設計しておく) エラー時に例外を投げる の2種類があるが、今悩んでいるのはそのC++の例外についてである。 例えば、機械学習のツールを書くことを考える。このようなツールではデータをパースする部分を書く必要が出てくるだろう。1行に1つのデータが以下のような形式で書かれているものをパースしたい。 1 2:1 4:2 5:1 このデータをパースするコード

    C++で例外を使ったプログラムをうまく書くにはどうすればいいのか - 射撃しつつ前転 改
  • std::vector の shrink_to_fit - 野良C++erの雑記帳

    C++0x の std::vector には、新しく shrink_to_fit() メンバ関数が用意されています。 これは「 vector の確保しているメモリ領域を、その大きさに見合ったサイズまで縮小する」関数で、 典型的な使い方は、以下のような感じになります: // std::vector に格納される要素数の見当がつけられない // が、「上限」は分かる。このとき余計な領域の再確保を避けたい std::size_t const limit = 〜〜; // vector に格納される要素の上限 std::vector<T> vec; // まず上限までメモリ領域を確保する vec.reserve( limit ); // vec に格納していく // ... // 格納終了。しかし、 // このままだと巨大なメモリ領域を占有してしまうので、 // vec の確保している領域を「 s

    std::vector の shrink_to_fit - 野良C++erの雑記帳
  • 本の虫: 多くのプログラマは言語を表面的な理解だけで使っている

    一般のプログラマの多くは、プログラミング言語というものを、ごく浅い表面的な理解だけで使っている。これは、いわゆる「入門書」によるところが大きい。入門書は、言語をできるだけパターンで教えようとする。かくかくしかじかの場合には、とらとらうまうまのように書いておけばいい、などといった具合だ。 たとえば、配列の全要素や、aggregateの全メンバーをゼロで初期化したいとする。多くのC++プログラマは、以下のように書く事であろう。 int a[100] = {0} ; このコードは、正しく動く。配列aの要素は、すべてゼロで初期化される。しかし、C++という言語を考えた場合、{0}と書く必要はない。空の{}で十分なのである。 int a[100] = {} ; では何故、多くのC++プログラマは{0}と書くのか。それは、多くの参考書が、そのように書いているからに過ぎない。大多数のC++プログラマは、

  • Boost.XpressiveとBoost.Spiritの速度比べ - murankの日記

    ちょっとした構文解析なら Xpressive でも充分だけど、ちゃんとした(?)構文解析器の Spirit と比べてどれだけ性能の差があるのか調べてみた。 どうせ比較するなら実用的なもので、というわけで RFC 2616 やらを参考に HTTP のリクエストヘッダをパースさせてみた。 当はパースしたヘッダの内容を取り込ませて比較したかったけど、時間の都合上、正しいヘッダかどうかの判断だけにした。 パースしたヘッダと、それぞれ 1 万回ずつパースしたときの結果は以下の通り。 計測に使用した PC のスペックは CPU: Core i5 750@2.67GHz、メモリ: 2GB、gcc: 4.4.3。 // 標準的なヘッダ std::string str("GET / HTTP/1.1\r\n" "Host:www.google.co.jp\r\n" "User-Agent:Mozilla/

    Boost.XpressiveとBoost.Spiritの速度比べ - murankの日記
  • oscpack - Radium Software

    oscpackはOpen Sound Control(以下OSC)パケットを扱うためのC++ライブラリだ。このライブラリにはパケット操作のほかに、UDPソケットを使った送受信の機能も用意されている。OSCを使うのに必要な機能はこれだけでほぼ全て揃うという、とても便利なライブラリだ。 僕はtouchOSCのクレジットの中にoscpackの表記があったことから、このライブラリの存在を知った。このライブラリは他にも様々なソフトウェアにおいて利用されており、OSCを使うためのライブラリとして代表的な存在となっているらしい。 oscpackの使い方はiostreamのそれに似ている。例えば、アドレス/foo/barに値0.45を送信するには、次のように記述する。 myOscStream << osc::BeginMessage("/foo/bar") << 0.45f << osc::EndMess

    oscpack - Radium Software
  • MSVCのランタイムとスレッドとリソースリークの関係

    の虫: いまだに変な宗教が流行っているを書いたところ、どうもこのへんの情報は、あまり知られていないようであるので、できるだけ分かりやすく解説することにした。 Cの標準ライブラリは、恐ろしく古いライブラリである。その設計は、マルチプロセッサ(コア)上で動作するマルチスレッドが当然の現代では、あまりよろしくない。 たとえば、strtokという関数がある。この関数は、引数として渡された文字列を、内部のバッファにコピーする。次のstrtokの引数には、NULLを渡すことで、そのコピーされたバッファから、次のトークンの場所へのポインターを返すのである。 void f( char const * ptr ) { char const * p1 = strtok( ptr, " " ) ; char const * p2 = strtok( NULL, " " ) ; } しかしもし、strtokが複

  • Jump between methods in C++

    tyru
    tyru 2010/10/12
    普通にm[とか使えばいいのでは
  • 1. そもそもベターCとは何か? | 株式会社きじねこ

    ベターCをテーマとして採り上げるからには、そもそもベターCとは何なのかを明らかにしておかなければなりません。「ベターC」というのは文字通り"より良いC"のことですが、正式な呼称でもなければ明確な定義があるわけでもありません。何をもって"より良い"とするのかも意見が分かれるところでしょう。 このように、「ベターC」というのは非常にあいまいな概念なのですが、それでも大きく分ければ次のどれかに当てはまるのではないかと思います。 C++コンパイラを使ってCとまったく同じように書くことができるスタイル Cの知識しかないプログラマでも、わずかな説明さえあれば書くことができるスタイル C++からオブジェクト指向プログラミングやジェネリックプログラミングを除外したスタイル Cの言語機能のうち、問題を起こしそうな機能の利用を制限したスタイル C++の言語機能を活用したいが結果的にできていないことを自虐的に語

  • 本の虫: アロケーターに最低限必要なもの

    C++0xでは、std::allocator_traitsの導入によって、アロケーターに最低限必要なものが、かなり減った。これにより、アロケーター実装者の負担も減っている。メモ替わりに書いてみる。 以下は、std::allocator_traitsを通してアロケーターを使う場合に、最低限必要なものである。 // 必ずテンプレートパラメーターをひとつ取らなければならない // T型のオブジェクトに対するアロケーター template < typename T > class allocator { public : // 最低限必要なnested type typedef T value_type ; // ストレージの確保用 // n個のT型のオブジェクトを確保できるに足るだけのストレージを返す value_type * allocate( std::size_t n ) ; // ストレ

  • LLVM 2.8登場、C++大幅強化 | エンタープライズ | マイコミジャーナル

    LLVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations. LLVMプロジェクトは6日(米国時間)、LLVMの最新版となるLLVM 2.8を公開した。LLVM 2.8は6ヶ月にわたる開発の成果物。新機能の追加が実施されているほか、Clang C++が大幅に強化され、またプロジェクト的にも大きな改善が実施されたバージョンになっている。LLVM 2.8におけるおもな新機能は次のとおり。 新しいシステムアセンブラ。現在サポートしているのはELFとCOFFのMachOターゲット コンパイラからの.oファイルのダイレクト書き込みをサポート ARMディスアセンブラ ARMテールコールサポート ARMコード生成

  • 開発メモ: 50行のC++コードでWebサーバを実装する

    「Kyoto Tycoonの設計 その四」改め、50行でWebサーバを書く方法を解説する。前回実装した「多重I/Oマルチスレッド汎用TCPサーバ」の上にHTTPの処理を行う層をつけて、「多重I/Oマルチスレッド汎用HTTPサーバ」を司るクラスを実装してみたので、それを使ってちょちょいとやる。 URLクラス HTTPと言えばURLが使えないと意味がない。URLは単なる文字列として扱ってもよいのだが、様々なシーンで分解や加工が必要になり、その処理はなにげに複雑で面倒なので、予めクラスとして導出しておいた方がよいだろう。 class URL { public: // 文字列のURLを解析して内部構造を作る void set_expression(const std::string& expr); // スキーム要素を設定する void set_scheme(const std::string&

  • でっつ :: Entries :: お母さんみたいにもっと3ヶ月前に教えて欲しい

    お母さんみたいにもっと3ヶ月前に教えて欲しい Posted by admin on the 28th of 3 月, 2008 at 12:00 am under 未分類.    This post has no comments. ccacheを使えば、C++のコードのコンパイルが死ぬほど遅くても大丈夫という情報が。これはheaderファイルなど頻繁には変更しないような部分のコンパイル結果を自動的にキャッシュしてくれるソフトウエアだ。よっぽどのことがないかぎり、一人で開発しているコードでは、includeする色々なheaderファイルのほうが、自分で入力するソースコードより多い。しかも、template programmingを使いまくるBoost Spiritのようなinculdeするheaderが大きくて、構文解析の処理量が多いライブラリを利用していると、明らかにheaderのせいで

  • C++辞める

    C++erが「C++辞める」と言ったらどうなるのかを検証してみた 大量に漏れていると思われるので適当に埋めて下さると幸いです

    C++辞める
  • deleted definitionによるクラスの初期化の制御

    bool型で初期化したいクラスがあるとする。 struct Boolen { Boolen( bool ) { } } ; 残念ながら、このクラスは、あまり宜しくない。なぜならば、C++には、忌々しい暗黙の型変換というものがあるからだ。 int main() { Boolen a = true ; // OK、当然だ Boolen b = 123 ; // OK、ハァ? Boolen c = &a ; // OK、おいおい、おかしいだろ常識的に考えて } このような馬鹿げたコードは、コンパイルエラーになって欲しい。もし、数値やポインターをboolとして扱いたいのであれば、明示的にキャストするべきなのだ。 int main() { Boolen a = true ; // OK、当然だ Boolen b = bool( 123 ) ; // 自分が何をしているのかは十分承知している Bool

  • ICU による文字コード変換ライブラリ - yanoの日記

    C++ で文字コードを変換するプログラムを作成したので紹介します.以下に実装する関数 encode を用いれば std::string, std::wstring 間で文字コードを変換できます. 文字コードの変換には代表的なライブラリとして libiconv と ICU とありますが,主にライセンス上の理由により今回は ICU を用います. ICU による文字コード変換ついては「ICU 2.x : UnicodeString による文字コード変換」に非常に丁寧にまとめられているので,内部の動きについて知りたい方は是非ご覧下さい. それでは以下に私の実装を示します. encode.hpp #ifndef ENCODE_HPP_20100822 #define ENCODE_HPP_20100822 #if defined(_MSC_VER) && (_MSC_VER >= 1020) # p

    ICU による文字コード変換ライブラリ - yanoの日記
  • StringPiece というライブラリの話 - 兼雑記

    例えばこう、ディレクトリの名前とその中のファイル名を / でくぎって結合する関数を書くとします。引数が std::string でも使いたいし const char* でも使いたい、ということで、たいていは void JoinFilePathStr(const string& dir, const string& base, string* out) { out->clear(); out->append(dir); out->push_back('/'); out->append(base); }なんてのを書くんじゃないかと思います。この関数で問題になるのは const char* を渡すと不要な string object が一度できることで、敬虔な C++ 屋さんだと、 void JoinFilePathStr(const string& dir, const char* base,

    StringPiece というライブラリの話 - 兼雑記
  • Singletonクラスのアクセスを簡単にマルチスレッド対応させたい - krustf の雑記

    Singletonクラスを作るたびにそのクラスのメンバ変数としてMutexとかを宣言したくないんです。冗長だし。 Lock, UnLockの方法もきっと面倒なんですよね。アクセスするたびにロックを手動で書くような。 そういったものを書かせないで、これまでみたいにget_instanceメソッドを呼び出してアクセスできるような形にしたい。 ということで、そんな感じの物を書いてみました。C++0x無いと動きません。GCC4.4(boost1.43.0), MSVC10(boost1.44.0)で確認しました。 (boost1.43.0はrvalue referenceに対応できてないので冗長なコードが混ざってます) ちゃんと定義しておくべきだろうなというのがいくつか欠けてる気がしますが…。 http://ideone.com/N2sFR 当ならポリシーベースにするべきなのかな、と思ったのです

    Singletonクラスのアクセスを簡単にマルチスレッド対応させたい - krustf の雑記