主に cppll ML でご紹介してきた tips をC++の仕様をより掘り下げた形でまとめ直してみました。 今回はカンマ演算子にフォーカスした内容です。Read less
主に cppll ML でご紹介してきた tips をC++の仕様をより掘り下げた形でまとめ直してみました。 今回はカンマ演算子にフォーカスした内容です。Read less
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
今回は前回のソースを見て、どこがどうなっているのかを解説したいと思います。とは言っても、どうなっているかほとんど予想が付いている人もいるかもしれませんが。 それでは、今回の要点です。 template はクラス宣言の前と各関数の実装の前の全てに付ける。 クラステンプレートは明示的にテンプレート引数を指定して使う。 メンバ関数の実装時にもクラス名にテンプレート引数を指定する。 引数にとる場合でもテンプレート引数を指定する。 では、いってみましょう。 今やることの確認です。CIntArray は int 型の配列しか使えなかったので、これをどの型の配列でも作れるようにしたいのでした。これにはクラステンプレートが利用できます。 クラステンプレートはクラスのテンプレートです。一部の型を自由に決めることができるわけです。 関数テンプレートとクラステンプレートは同じ「テンプレート」なので、そう文法が違
はじめに 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
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
注: 長いです。 スクリプト言語でのxUnit実装を使ったことがある方なら、テストを定義するだけでテストが実行されることが当たり前ではないでしょうか。c2.comのWikiによると、これはTest Collectorというそうです。定義したテストを自動的に集めてくる機能のことです。 一般的にTest Collectorの機能は言語が提供するリフレクション機能やメタプログラミング機能を使って実現されます。 例えば、Rubyのtest-unit 2.xでは、リフレクションを使う方法とメタプログラミングを使う方法の両方をサポートしています。リフレクションを使う方法ではObjectSpace.each_object(Class)ですべてのクラスを取得し、その中のTest::Unit::TestCaseのサブクラスを集めます。メタプログラミングを使う方法ではTest::Unit::TestCase.
後日記: ていうかC++0xやC++11といったものに対応し始めてるVisualStudio2010以降やXCodeなどではもはやラムダ式が使えるので、 本記事の扱うmem_funや、bindなど、この辺の関数アダプタ君たちはもう軒並み必要なくなってくる感じかと思われます。 C++11については、「C++ポケットリファレンス」などの本を見てもらうとして、mem_funやbindなど、それしかない時代は便利でしたが、 分かるまでは分かりにくいし、ラムダ式のほうがずっと分かりやすくて多機能なので、本記事の存在価値はほぼなくなりました。 なのでmem_funとかbindとか知らない人はうっかり勉強してしまわないように気をつけましょう。ラムダ式覚えましょう。 C++ ポケットリファレンス 作者: 高橋晶,安藤敏彦,一戸優介,楠田真矢,道化師,湯朝剛介出版社/メーカー: 技術評論社発売日: 2013
vector は vector に対して特殊化されていて、領域を無駄にしないように、ビット単位で格納されるようになっています。 これは使用する領域が少なくなる反面、 &v[0]+i == &v[i] であるという、vector としての特徴の一つを満たさなくなってしまいます。 他にもいくつか、bool 以外の vector と異なる動作をする箇所があります。 そのため、Twitter や掲示板等で vector の話が出るたびに必ずといっていいほど「あれは使うな。失敗作だ」とか「あれはもう忘れろ」という趣旨の発言が見られます。 そういった場面に遭遇するたびに自分は微妙な気分になります。 実際のところ、「大量のビットを格納したいけれどもメモリを無駄にしたくない」という状況がある*1とき、vector 以外の選択肢はどの程度あるんでしょうか? まず自分で作るという選択肢、これはほとんどの場合は
GNU/Linux でのスレッドプログラミング NPTL (Native POSIX Thread Library) Programming. 以前から GNU/Linux でスレッドプログラミングをするための簡単なガイドを書きたいと思っていました。今更スレッドプログラミングについて書いても目新しいものになるとは思えないのですが、初めて NPTL (Native POSIX Thread Library) を使ったプログラムをするという方には、もしかしたら役に立つ情報かもしれません。はじめは怖々小さなプログラムを書いて動かしてみる。思ったより簡単なことに驚かれるでしょう。スレッドプログラミングと言っても難しいことはなにもありません。ライブラリが沢山仕事をしてくるおかげで快適に使うことができます。 本文中では glibc のバージョンによる違いについても触れます。参照したバージョンは gli
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
報道機関の発表の通り、10/27日に分散オンライン機械学習基盤Jubatusを発表しました。これに関しても書きたいことは山ほどあるのですが、来週Jubatus Workshopがあるので、それまでは秘密です(ウソです、聞かれたら答えます)。 さて、同時に公開されたのがpficommonです。これは、弊社内で使われていた便利ライブラリで、あまりの便利さにこれがないと開発できないため、Jubatusでも使われています(もちろんSedueでも)。そして、Jubatus公開に伴い公開となりました。pficommonは明日からでも使うべきなライブラリなので、先にこちらを紹介します。 pficommonは様々なライブラリからなる、複合的なライブラリです。 今日は個人的にお気に入りの、 xhtml_cgi json の2つを紹介します。 xhtml_cgi 実験用のコードなどを書くと、たくさんログを出力
概要 † データを保持するオブジェクトを指し示すポインタをもつデザインのことをしばしば「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
@SubaruG センセが pimpl についてわかりやすくつぶやいていたのでまとめました。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
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く