タグ

c++に関するn_shuyoのブックマーク (19)

  • Kazuho@Cybozu Labs: 今更 C++ で JSON パーサ「picojson」を書いたわけ

    既に mattn さんが、「Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!」で紹介してくださっています (mattn さん、アドバイス&バグ情報ありがとうございます!) が、いまさら C++ で JSON パーサを作りました。それは、以下の3点を満たすものがなかったから。 ヘッダファイル only boost 等、他の重たいライブラリに依存しない array や object が STL にマッピングされる コードは、coderepos に置いてありますので、よろしければお使いください (picojson.h)。 なお、現時点での制限事項として、 \n や \r, \uXXXX といったエスケープの処理が未実装rev. 34232 で対応しました (含サロゲートペア) 空白文字の判断基準が RFC と異なるrev. 34277 で空白と

  • boost::threadとstd::thread周りを調べてたら - xyuyuxの日記

    こんな記事を見つけました。 http://msdn.microsoft.com/ja-jp/magazine/cc163405.aspx 以下記事内に書かれているWindows Vista以降で使用可能な関数とPosixとの対応表を作ってみました。 PosixAfter Windows Vista pthread_cond_initInitializeConditionVariable pthread_cond_timedwaitSleepConditionVariableCS SleepConditionVariableSRW pthread_cond_signalWakeConditionVariable pthread_cond_broadcastWakeAllConditionVariable pthread_cond_destroyなし pthread_onceInitOnceE

    boost::threadとstd::thread周りを調べてたら - xyuyuxの日記
    n_shuyo
    n_shuyo 2009/06/23
    SRWLockとc++0x
  • Refactor!™ for C++ - Developer Express - Improving the Developer Experience™

    Announcing DevExpress Universal v24.1 Developer Express Inc is proud to announce the immediate availability of its newest release, DevExpress v24.1. Built and optimized for desktop, web, and mobile developers alike... DevExpress Wins 19 Visual Studio Reader's Choice Awards Like previous years, DevExpress dominated Visual Studio Magazine's 2023 Readers Choice Awards. We thank all our loyal users fo

    n_shuyo
    n_shuyo 2009/05/08
    リファクタリングツール
  • Singleton速度比較 (1) - memologue

    2chのマルチスレッドスレッドで興味深い議論があった。見ていただければわかるが、「C++でdouble checked locking(DCL)は安全か」という話題を、CPU毎に検討している。各CPUのmemory modelの話に立ち入った、楽しい議論だ。特に、リンクされている Double-Checked Locking, Threads, Compiler Optimizations, and More http://www.nwcpp.org/Downloads/2004/DCLP_notes.pdf なるScott Mayersさんのペーパーがイケてると思う。最近書かれたばっかり。ここを読んでいなかったら当分知ることはなかっただろうな。ラッキー。 というわけで題も興味深いのだが、とりあえずスレッドの中でいくつか示された「DCLに代わる高速なシングルトンの実装方法」が実際どの程度

    Singleton速度比較 (1) - memologue
  • Kazuho@Cybozu Labs: なんとなくリフレクション in C

    n_shuyo
    n_shuyo 2008/11/12
  • あなたはC++ の発明者? それとも創造者?〜Bjarne Stroustrup氏との対話〜:CodeZine

    はじめに 「Bjarne Stroustrup氏との対話」連載を担当することになりました、豊田孝と申します。よろしくお願いいたします。 対話の相手であるBjarne Stroustrup氏は、プログラミング言語「C++」を設計し、最初に実装した人です。それだけでなく、同氏はC++を国際標準プログラミング言語の地位に付かせました。大変なエネルギーの持ち主です。 筆者はこの数年、「同氏の生き方から何かを学べるのではないか」と考えてきました。その考えは日毎に熱を帯び、「学べるはずだ!」、そしてついには、「わが国の開発者に、同氏の考え方と生き方ぜひお伝えしたい!」へと変化し今回の連載を始めるに至りました。 稿でのStroustrup氏との対話はメール交換を通して行われます。基的には、筆者が質問文を用意し、Stroustrup氏がその質問に対して高所からコメントを寄せることになります。C++言語

    n_shuyo
    n_shuyo 2008/07/31
  • JIT Compiler for URI Templates (C++/Xbyak)

  • URI Template の C++ 実装 (Xbyak による JIT 版ほか) (nakatani @ cybozu labs)

    その昔はテキスト整形ツールすらアセンブラで書くほどのバイナリアンでもあったんですが、X68000 から卒業せざるをえなくなると同時にすっかり足を洗っていたのです。 が、何の因果かこのたび、C++の世界に引き摺り込まれ、メモリやクロック数にきゅうきゅう呻吟する日々が再びやってきてしまいました……。もはやGCの無い言語でプログラミングするまい、と堅く心に誓っていたのになあ(涙)。 まあ、嘆いてばかりいても始まらない。 バイナリアンは××年ぶり(x86 の知識は 286 が最後)、C++ は実質初めて、勉強しないといけないことがたんまり。 んー中谷は何か作ってみないとわかんない人なんで、身近で手頃な題材を…… というわけで URI Template を実装してみました。調べた範囲内ではC++の実装もなさそうだし。 勉強が主目的なので、仕様は簡易に draft-01 準拠(単純な substitu

  • 実践的なパターン: テストの容易性を高める設計

    Code download available at:WinUnit2008_02.exe(1438 KB) Contents Start Testing Today Getting Started with WinUnit Fixtures: Setup and Teardown Running WinUnit Implementation Details Going Further... These days it can be hard not to feel downright oppressed as a native code developer—it seems like the developers using the Microsoft® .NET Framework get all the cool tools! I've always been interested

    実践的なパターン: テストの容易性を高める設計
  • shared_ptrからpimplのデストラクタ呼び出し

    pimplイディオムの勉強をするために以下のようなプログラムを作りました。 //MySharedPtr.h template<typename tnT> class MySharedPtr { tnT *mPtr; public: MySharedPtr(tnT *ptr) : mPtr(ptr) {} ~MySharedPtr() { delete mPtr; } //(1) }; //Foo.h class Foo { struct stImpl; MySharedPtr<stImpl> mImpl; //(2) public: Foo(); }; //Foo.cpp Foo::stImpl { ~stImpl() { cout << "xxx" << endl; } //(3) }; Foo::Foo() : mImpl(new stImpl) {} //main.cpp int m

    shared_ptrからpimplのデストラクタ呼び出し
    n_shuyo
    n_shuyo 2008/07/07
  • 動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary

    boost::shared_ptr は動的削除子 (dynamic deleter) と呼ばれる技法に基づいて実装されています.この動的削除子という技法で重要なのは, boost::shared_ptr が最終的に呼び出す解放処理が boost::shared_ptr のテンプレート引数の型に関係なく,コンストラクタに実際に渡されたポインタの型で,かつ boost::shared_ptr のコンストラクタの呼び出しの段階で 決定する,ということです. 以下のようなコードが,動的削除子の効果が一番分かりやすい例になるでしょう. class X{ public: ~X() { std::cout << "X::~X" << std::endl; } }; class B{ public: ~B() // virtual でないことに注意!! { std::cout << "B::~B" <<

    動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary
  • gcc の -Wall 以外の警告オプション - ひげぽん OSとか作っちゃうかMona-

    以前同僚の光成さんが、以下の warning オプションを使っていると書かれていたのが気になったので調べてみました。 -Wall -W -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-arith もし上記以外にも良さげなオプションがありましたら教えてください<(_ _)> 情報源 man と info と http://sugarpot.sakura.ne.jp/yuno/?gcc%2Fwarning 。 最初は日語版の man だけを見ていたのですが、id:kazuhooku に info を見るべしと教わりました。 man も info もそうですが、日語版は情報が少なかったりするので注意。 LANG=C man gccなどとしましょう。 -Wforma

    gcc の -Wall 以外の警告オプション - ひげぽん OSとか作っちゃうかMona-
    n_shuyo
    n_shuyo 2008/06/24
  • Smart Pointer Programming Techniques

    スマートポインタプログラミングテクニック 不完全クラスを利用して実装を隠蔽する "Pimpl" イディオム 抽象クラスを利用して実装を隠蔽する delete px.get() を予防する shared_ptr を利用して配列へのポインタを保持する オブジェクトの確保の詳細をカプセル化し、ファクトリ関数をラップする 静的なオブジェクトを指すポインタを shared_ptr で保持する shared_ptr を利用して COM オブジェクトへのポインタを保持する shared_ptr を利用して組み込み参照カウントを持つオブジェクトを保持する shared_ptr を利用して他の所有権共有スマートポインタを保持する 生ポインタから shared_ptr を獲得する コンストラクタの中で this から shared_ptr (weak_ptr) を獲得する this から shared_ptr

    n_shuyo
    n_shuyo 2008/06/23
    EUC-JP
  • Boost Library Requirements and Guidelines

    Introduction Requirements License requirements Portability requirements Ownership Organization Integration Guidelines Backwards Compatibility Design and programming Filenames Naming consistency Documentation Rationale Exception-specification rationale Naming conventions rationale Source code fonts rationale Tabs rationale Directory and filename rationale ECMAScript/JavaScript rationale Rationale r

  • C++11 - Wikipedia

    この記事は更新が必要とされています。 この記事には古い情報が掲載されています。編集の際に新しい情報を記事に反映させてください。反映後、このタグは除去してください。(2019年1月) C++11は、プログラミング言語 C++ のISO標準 ISO/IEC 14882:2011 の略称である。規格の策定中は2009年中の標準化を目指していたため、C++0x という仮称で呼ばれていた。 ISO/IEC 14882:2003 (C++03) に代わるものとして、2011年8月12日にISOによって承認された[4]。後継のC++14が2014年8月18日に承認されている。 コア言語への機能追加や標準C++ライブラリの拡張を施し、C++TR1ライブラリの大部分を(数学的特殊関数ライブラリを除いて)取り込んでいる。 C++ への修正はコア言語と標準ライブラリの双方に及ぶ。 委員会は、新規格の個別の要素の

    n_shuyo
    n_shuyo 2008/06/20
  • EnumWindows でのウィンドウ列挙(VC版)

    まずは、 EnumWindows 関数を使用してウィンドウハンドルを列挙する場合に使用される、 EnumWindowsProc コールバック関数のコードを作成してみます。 HSP スクリプト中で呼び出す EnumWindows 関数は以下のように定義されています。 BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // コールバック関数のアドレス LPARAM lParam // アプリケーション定義値 ); この関数の lpEnumFunc パラメータに指定するものは、アプリケーション側で実装された EnumWindowsProc コールバック関数のアドレスになります。 BOOL CALLBACK EnumWindowsProc( HWND hwnd, // ウィンドウハンドル LPARAM lParam // アプリケーション定義値

  • 2004-06-05

    CRTPについてちまちま書いていたのをまとめてみました. CRTP(Curiously Reccursive/Reccuring Template Pattern)とは以下のように基底クラスのテンプレート引数として自分自身を代入するテクニックのことを指します. template class Base{/*.....*/}; class C : public Base{/*.....*/}; よく見かけるパターンなので,これがどういう使われ方をしているかを適当にまとめてみました. あるクラスの機能の一部を変えてコードの再利用を行う場合,変えたい機能を提供するメンバ関数を仮想関数にしてそれを派生クラスでオーバーライドするのが通常の方法ですが,CRTPを使えば仮想関数を用いずに行うことができます. 自分で何か良さそうな例を書こうと思ったのですが,あんまり適切な例が思い浮かばないので,このCRTP

    2004-06-05
    n_shuyo
    n_shuyo 2008/06/10
  • C++/CLIでmanagedなバイト配列をネイティブなバイト配列を処理する関数に渡す 【▲→川俣晶の縁側→ソフトウェア→技術雑記】

    ネイティブなバイト配列を処理する関数があるとします。 これに対して、managedなバイト配列を渡して処理させたいとします。 パフォーマンスに影響するため、1バイトずつコピーする処理は避けたいと思います。 以上の条件を実現したサンプルコードを書いてみました。 サンプルソース § Visual C++ Express 2005 Beta2で、managedコンソールアプリケーションのテンプレートでプロジェクト作成後に、以下のソースを入力します。

    n_shuyo
    n_shuyo 2008/06/10
  • Let's Boost - インストール方法

    インストーラやパッケージを使う方法 一番簡単な方法です。コマンド一発でインストール完了です。 ただし、下記以外の開発環境や、最新バージョンリリース直後などは、 パッケージ化が追いついていないことがあります。 その場合手動での Boost のダウンロードやビルド、設定が必要になります。 → 手動インストール Visual C++ の場合 Visual C++ 7.1~10.0 用のインストーラが boostpro で公開されています。 ビルド済みライブラリが自動インストールできます。 Cygwin gcc の場合 CygwinのインストーラでBoostを一緒にインストールできます。 「Devel」カテゴリの「boost」と「boost-dev」を選択してください。 UNIX系環境の場合 大抵のディストリビューションでパッケージ化されているようです。 yum install boost boo

  • 1