タグ

c++に関するmoozのブックマーク (187)

  • C++ tips 3 カンマ演算子編

    主に cppll ML でご紹介してきた tips をC++の仕様をより掘り下げた形でまとめ直してみました。 今回はカンマ演算子にフォーカスした内容です。Read less

    C++ tips 3 カンマ演算子編
    mooz
    mooz 2012/02/13
    カンマ演算子で一文に複数の式を.一時オブジェクトの寿命が文の終了時までということを利用したインラインロックの説明.
  • カスタムメモリマネージャと高速なメモリアロケータについて

    2. 自己紹介 ハンドルネーム alwei Twitter ID @aizen76 alweiもしくはaizenのどちらかを使っています 流浪のゲームプログラマ Wii、DS、PSP、PS3、3DSゲームとか作ってた 2Dゲーム好きなのに、実は3Dゲームしか作ったことがない 最近触手軍団に仲間入りして、オンラインゲームを作り始めました アジャイルとかTDDとか勉強中

    カスタムメモリマネージャと高速なメモリアロケータについて
    mooz
    mooz 2012/02/13
    メモリプールアロケータが便利
  • Herb Sutter - Publications

    Herb is the author of the bestselling and highly-acclaimed Exceptional C++ books, coauthor of the landmark C++ Coding Standards, and author of hundreds of articles in print and online media. Besides these, he has contributed to other books and articles. BooksExceptional C++ H. Sutter, Addison-Wesley, 2000, ISBN 0-201-61562-2. More C++ Gems (major contributor) R. Martin (ed.), SIGS Books / Cambridg

    mooz
    mooz 2012/01/20
    Effective Concurrency in C++
  • ロベールのC++教室 - 第38章 クラステンプレート2 -

    今回は前回のソースを見て、どこがどうなっているのかを解説したいと思います。とは言っても、どうなっているかほとんど予想が付いている人もいるかもしれませんが。 それでは、今回の要点です。 template はクラス宣言の前と各関数の実装の前の全てに付ける。 クラステンプレートは明示的にテンプレート引数を指定して使う。 メンバ関数の実装時にもクラス名にテンプレート引数を指定する。 引数にとる場合でもテンプレート引数を指定する。 では、いってみましょう。 今やることの確認です。CIntArray は int 型の配列しか使えなかったので、これをどの型の配列でも作れるようにしたいのでした。これにはクラステンプレートが利用できます。 クラステンプレートはクラスのテンプレートです。一部の型を自由に決めることができるわけです。 関数テンプレートとクラステンプレートは同じ「テンプレート」なので、そう文法が違

    mooz
    mooz 2012/01/14
    class template.
  • privateメンバに外部から非侵入的にアクセスする - redboltzの日記

    はじめに C++では通常、クラスのprivateメンバに外部からアクセスすることができない。 アクセスするためには、friend関数やfriendクラスを用いる。 しかし、 http://bloglitb.blogspot.com/2010/07/access-to-private-members-thats-easy.html で話題となり、Daveが、 https://gist.github.com/1528856 にエッセンスを抽出したコードを起こしているが、privateメンバに外部から合法的にアクセスする方法がある。 Daveのコードのコメントだけで必要十分かもしれないが、私は理解するのにかなり時間がかかってしまったので、その経緯を忘れないためにもここに書いておきたいと思う。 メンバポインタの復習 まずは、このコードを見て欲しい。 http://ideone.com/dGRqg

    mooz
    mooz 2012/01/12
    &A::mem1 はクラス A のレイアウトにおける mem1 のオフセットをあらわす.a.*&A::mem1 としてオブジェクトを与えることで,実体のアドレスが定まる.
  • std::mapのoperator[]にconst版が提供されていない理由 - 梶本裕介の日記

    http://d.hatena.ne.jp/programer_hoshimi/20090202/1233593619T& operator[](const key_type& x);1 Returns: (*((insert(make_pair(x, T()))).first)).second.ISO/IEC 14882:2003 23.3.1.2規格を見るとわかるように,mapのoperator[]は渡されたキーに対して要素が存在しない場合新しい要素を追加することになっているのでconstに出来ないのであります.ちなみに次期規格では,要素が存在しない場合は例外を投げるメンバ関数atが追加される予定です.T& at(const key_type& x);const T& at(const key_type& x) const;7 Returns: A reference to the e

    mooz
    mooz 2012/01/09
    要素が存在しない場合は新しい要素が追加されるので const にできない.新しい要素は,デフォルトコンストラクタで作成される.要素が存在しない場合例外を投げる at() が追加予定.
  • Yohei Yoshihara's Home Page

    MySimplePlan More Detail Magquash More Detail Previous Next

  • C++用xUnitでのテストの書き方 - 2009-11-07 - ククログ

    注: 長いです。 スクリプト言語でのxUnit実装を使ったことがある方なら、テストを定義するだけでテストが実行されることが当たり前ではないでしょうか。c2.comのWikiによると、これはTest Collectorというそうです。定義したテストを自動的に集めてくる機能のことです。 一般的にTest Collectorの機能は言語が提供するリフレクション機能やメタプログラミング機能を使って実現されます。 例えば、Rubyのtest-unit 2.xでは、リフレクションを使う方法とメタプログラミングを使う方法の両方をサポートしています。リフレクションを使う方法ではObjectSpace.each_object(Class)ですべてのクラスを取得し、その中のTest::Unit::TestCaseのサブクラスを集めます。メタプログラミングを使う方法ではTest::Unit::TestCase.

    C++用xUnitでのテストの書き方 - 2009-11-07 - ククログ
    mooz
    mooz 2011/12/28
    素晴らしい記事.様々なテストツールに対する所感がまとめられている.cutter.
  • mem_funについて - nursの日記

    後日記: ていうかC++0xやC++11といったものに対応し始めてるVisualStudio2010以降やXCodeなどではもはやラムダ式が使えるので、 記事の扱うmem_funや、bindなど、この辺の関数アダプタ君たちはもう軒並み必要なくなってくる感じかと思われます。 C++11については、「C++ポケットリファレンス」などのを見てもらうとして、mem_funやbindなど、それしかない時代は便利でしたが、 分かるまでは分かりにくいし、ラムダ式のほうがずっと分かりやすくて多機能なので、記事の存在価値はほぼなくなりました。 なのでmem_funとかbindとか知らない人はうっかり勉強してしまわないように気をつけましょう。ラムダ式覚えましょう。 C++ ポケットリファレンス 作者: 高橋晶,安藤敏彦,一戸優介,楠田真矢,道化師,湯朝剛介出版社/メーカー: 技術評論社発売日: 2013

    mem_funについて - nursの日記
    mooz
    mooz 2011/12/25
    メンバ関数のポインタ記法
  • Concatenating two std::vectors

    Ask questions, find answers and collaborate at work with Stack Overflow for Teams. Explore Teams Collectives™ on Stack Overflow Find centralized, trusted content and collaborate around the technologies you use most. Learn more about Collectives

    Concatenating two std::vectors
    mooz
    mooz 2011/12/20
  • vector の話 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    vector は vector に対して特殊化されていて、領域を無駄にしないように、ビット単位で格納されるようになっています。 これは使用する領域が少なくなる反面、 &v[0]+i == &v[i] であるという、vector としての特徴の一つを満たさなくなってしまいます。 他にもいくつか、bool 以外の vector と異なる動作をする箇所があります。 そのため、Twitter掲示板等で vector の話が出るたびに必ずといっていいほど「あれは使うな。失敗作だ」とか「あれはもう忘れろ」という趣旨の発言が見られます。 そういった場面に遭遇するたびに自分は微妙な気分になります。 実際のところ、「大量のビットを格納したいけれどもメモリを無駄にしたくない」という状況がある*1とき、vector 以外の選択肢はどの程度あるんでしょうか? まず自分で作るという選択肢、これはほとんどの場合は

    vector の話 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
    mooz
    mooz 2011/11/28
    vector<bool> の是非と代替について.欠点を理解した上で使う.std::bitset, boost::dynamic_bitset.
  • Linux スレッドプログラミング

    GNU/Linux でのスレッドプログラミング NPTL (Native POSIX Thread Library) Programming. 以前から GNU/Linux でスレッドプログラミングをするための簡単なガイドを書きたいと思っていました。今更スレッドプログラミングについて書いても目新しいものになるとは思えないのですが、初めて NPTL (Native POSIX Thread Library) を使ったプログラムをするという方には、もしかしたら役に立つ情報かもしれません。はじめは怖々小さなプログラムを書いて動かしてみる。思ったより簡単なことに驚かれるでしょう。スレッドプログラミングと言っても難しいことはなにもありません。ライブラリが沢山仕事をしてくるおかげで快適に使うことができます。 文中では glibc のバージョンによる違いについても触れます。参照したバージョンは gli

    mooz
    mooz 2011/11/28
    pthread
  • TransactionalMemory - GCC Wiki

    Transactional Memory in GCC Background Transactional memory is intended to make programming with threads simpler, in particular synchronizing access to data shared between several threads using transactions. As with databases, a transaction is a unit of work that either completes in its entirety or has no effect at all (i.e., transactions execute atomically). Further, transactions are isolated fro

  • pficommonをちょっとだけ紹介

    報道機関の発表の通り、10/27日に分散オンライン機械学習基盤Jubatusを発表しました。これに関しても書きたいことは山ほどあるのですが、来週Jubatus Workshopがあるので、それまでは秘密です(ウソです、聞かれたら答えます)。 さて、同時に公開されたのがpficommonです。これは、弊社内で使われていた便利ライブラリで、あまりの便利さにこれがないと開発できないため、Jubatusでも使われています(もちろんSedueでも)。そして、Jubatus公開に伴い公開となりました。pficommonは明日からでも使うべきなライブラリなので、先にこちらを紹介します。 pficommonは様々なライブラリからなる、複合的なライブラリです。 今日は個人的にお気に入りの、 xhtml_cgi json の2つを紹介します。 xhtml_cgi 実験用のコードなどを書くと、たくさんログを出力

    mooz
    mooz 2011/11/08
    pficommon
  • pImplイディオム - ゲームプログラミングWiki

    概要 † データを保持するオブジェクトを指し示すポインタをもつデザインのことをしばしば「pImplイディオム」といいます。 「pImpl」とは"pointer to Implementation"の略称です。 ↑ なぜ「pImplイディオム」を使うのか † 例としてTpodクラスについて考えます。 Tpod.h #include "Tea.h" // 注目 class Tpod { private:~ Tea m_tea; public: Tea GetTea(); }; Tpod.cpp #include "Tpod.h" Tea Tpod::GetTea() { return m_tea(); } 普通はこのように宣言と定義を書くが、この時Teaクラスを使うために Tea.hをインクルードしています。 もしもTea.hが変更されたらどうなるでしょうか? Tpod.hはT

    mooz
    mooz 2011/11/08
  • 「pimpl」のすゝめ

    @SubaruG センセが pimpl についてわかりやすくつぶやいていたのでまとめました。C++ ならでは(?)の解説ですね。

    「pimpl」のすゝめ
    mooz
    mooz 2011/11/08
    "pimpl で作られたクラスは、どのように使ってもいい。abstract class と継承を使った実装秘匿は、ポインタ経由でしか使えない。"
  • GitHub - retrieva/pficommon: General purpose C++ library for PFI

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - retrieva/pficommon: General purpose C++ library for PFI
    mooz
    mooz 2011/11/08
    pficommon: Common Library of C++
  • Pfi Seminar 2010 1 7

    3. Caution!  発表には次のものは含まれません  C++の有用なプログラミング技法  広くつかわれるべきテクニック  その他なにか視聴者に役立つもの  そういうのを期待された方はあしからず 4. 自己紹介  田中英行 (@tanakh, id:tanakh)  Haskell愛好家  C++歴  1998年 ~  2005年ぐらいまでは漫然と使っていました  社内用C++ライブラリ(pficommon)を作成  C++のきもさを再認識  その辺で得られた知見を話します ○ ※実際に使われているわけではないです

    Pfi Seminar 2010 1 7
    mooz
    mooz 2011/11/08
  • Boost Fusion Library

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami

    Boost Fusion Library
    mooz
    mooz 2011/10/22
    様々な型のシーケンスが格納できるコンテナ.Compile time, Run time.
  • Deep C

    Programming is hard. Programming correct C and C++ is particularly hard. Indeed, both in C and certainly in C++, it is uncommon to see a screenful containing only well defined and conforming code.Why do professional programmers write code like this? Because most programmers do not have a deep understanding of the language they are using.While they sometimes know that certain things are undefined o

    Deep C
    mooz
    mooz 2011/10/10