C++

unordered 系コンテナの max_load_factor 周りについて

C++

この記事は LL/ML Advent Calendar 19日目の記事です。 C++11 で追加された unordered 系のコンテナは、ハッシュを使って要素を管理するコンテナです。 そのハッシュを使ったアルゴリズムもいくつかありますが、C++11 では OpenHashing 方式を想定している…

shrink-to-fit の幻想

C++

C++03 には shrink-to-fit というイディオムがあります。 More C++ Idioms/縮めて合わせる(Shrink-to-fit) - Wikibooks std::vector<int> v; //... たくさんの push_back と、たくさんの v に対する削除 //その結果、v のサイズは小さいが、容量は大きい。 std::v</int>…

try-and-back-off アルゴリズム

C++

C++11 には、複数の Lockable なオブジェクトをロックしてくれる std::lock 関数があります。 template<class L1, class L2, class... L3> void lock(L1& m1, L2& m2, L3&... m3); この関数の最大の特徴は、決してデッドロックしないことです。 そして、このデッドロックしないという要件を満</class>…

std::future::is_readyが無くなった理由

C++

ある時期までの std::future 関数では、std::promise によって値や例外がセットされているかどうかを問い合わせる関数がありました。しかし現在の C++11 の仕様書では消されています。 なぜ消されたのか気になったので調べてみたところ、以下の文書が見つか…

mapのoperator[]

C++

cppreference.com の map::operator[] の説明を読むと、こんなことが書かれています。 1) Essentially performs (insert(std::make_pair(key, T())).first)->second. 2) Essentially performs (insert(std::make_pair(std::move(key), T())).first)->second.…

Boost.勉強会 #9 つくばでLTしてきた

C++

発表資料: Effective STL 11 - Google スライド 10分間のLTのくせに48ページも使いました。 が、ちゃんと10分ぐらいで終わった気がします。ビデオまだ見てないのでわかりませんけど。 で、この資料は10分で説明することを目的にしてて、あまりに簡潔すぎて足…

日経ソフトウエアの連載記事

C++

最近この記事ばっかりな気がするのは置いといて。『新規格で学ぶC++入門』最終回となる第4回は、マルチパラダイムについて書きました。日経ソフトウエア 2012年 05月号 [雑誌]作者: 日経ソフトウエア出版社/メーカー: 日経BP社発売日: 2012/03/24メディア: …

日経ソフトウエアの連載記事

C++

『新規格で学ぶC++入門』第3回は『汎用性を高めるジェネリックプログラミング』というお話を書きました。日経 ソフトウエア 2012年 04月号 [雑誌]作者: 日経ソフトウエア出版社/メーカー: 日経BP社発売日: 2012/02/24メディア: 雑誌購入: 4人 クリック: 68…

日経ソフトウエアの連載記事

C++

いろいろ忙しくてブログで紹介するのがすっかり遅くなってしまいましたが、最近は日経ソフトウエアで『新規格で学ぶC++入門』という連載記事を書かせてもらってます。 主に Java や C# を使っている人向けの話なので、C++ をよく知っている人にとってはあま…

C++03 の仕様から変更のあったライブラリ

C++

この記事は C++11 Advent Calendar 13 日目の記事です。 C++03 で用意されていた標準ライブラリは基本的にそのまま残っていたり deprecate されていたりとかぐらいしかありませんが、それでも少し仕様が変更されていたりとかしています。 後方互換性を維持す…

Boost.Context について調べた

この記事は Boost Advent Calendar 13 日目の記事です。 Boost.Context は、跋扈するコンテキスト切り替えの利用を統一するべく颯爽と現れた救世主です(大げさ)。 そもそもコンテキスト切り替えって何ぞや?という場合は、適当にググるか、自分の Boost.Co…

vector の話

C++

vector は vector に対して特殊化されていて、領域を無駄にしないように、ビット単位で格納されるようになっています。 これは使用する領域が少なくなる反面、 &v[0]+i == &v[i] であるという、vector としての特徴の一つを満たさなくなってしまいます。 他…

C++03 と C++11 の互換性

C++

C++03 と C++11 ってどれぐらい互換性があるのかなーと気になっていたんだけど、仕様書の §C.2 を見てみたらずばりなものが載っていたので、一通り読んでみた。 C++03 のコードを C++11 として動かそうとしたときにコンパイルエラーやランタイムエラーが発生…

標準でどのヘッダがどのヘッダを include しているかを調べてみた

C++

std::endl って、どのヘッダで定義されているか知っていますか? と思った人はハズレです。実は std::endl は で定義されてます。 これって を include するだけだと標準に準拠した動作にならないんじゃね?とか思ったのですけど、どうやら は も include す…

Nagios Event Broker を使ってみた

C++

Nagios Event Broker (NEB) は Nagios からイベントを受け取るためのモジュール。 Nagios からの通知に対して特殊な操作を行いたいときに使う。 NEB のドキュメント Nagios: Developer Information から取得できる。バージョンが古いけれども、基本的な部分…

CSS3 のベジエ曲線のアニメーションを実装してみたい

C++

CSS3 の ease-in や ease-out は結構綺麗なので、あの動きを実装してみようかなーと思ったわけです。 CSS3 のベジエ曲線は3次曲線なので4点が必要ですが、最初の点と最後の点は固定値なので、指定するのは2番目と3番目の位置だけです。 Ceaser - CSS Eas…

リロケータブルなメモリを作ってみた

C++

コンシューマとかのゲーム開発で画像(というよりは大きいリソース)を扱っていると、メモリの断片化が起こって悲しいことになることがよくあります。 対策としてメモリアロケータを変えたり、一括でメモリを確保したりといった方法で何とかすることがありま…

関西ゲームプログラミング勉強会

に行って、Squirrel 言語について発表してきました。 Squirrel View more presentations from melpon 動画はこちら あといくつか補足しておきます。 Squirrel の発音について window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)…

TrivialClock

C++0x の最新の仕様では、Chrono ライブラリに TrivialClock の要件が追加されています。 今までの Clock の要件に加えて、TrivialClock はほとんどの操作で例外を投げてはいけないという要件が追加されています(他にもいくつか追加されている要件がありま…

ゲームエンジン作ってる人と話してきた

C++

自作するよりそこら辺にあるゲームエンジン使った方がいいんじゃない? という質問をしたところ、こんな感じの答えが返ってきました*1。 いくつかのゲームエンジンを使ったことあるが、あれをまともに使いこなすには数年掛かる。そしてそこから中身がどうな…

char8_t 欲しい

C++0x からは UTF16 の文字列リテラル(u"...")とその型(char16_t)、UTF32 の文字列リテラル(U"...")とその型(char32_t)が入ります。 そして UTF8 の文字列リテラル(u8"...")も入ります。しかし UTF8 を表す型は入りません。u8"..." は char の配列…

の残念なところ

C++

最近はサボり気味ですが、ちょっと前まで C++0x の仕様書のアルゴリズム部分を読んで cpprefjp の <algorithm> を編集していました。 そこで、読んでておかしいと思ったところや、サンプルを書こうとして残念な気分になった部分があったので紹介しておきます。 まず fin</algorithm>…

コメント戦争

C++

最近「『//コンストラクタ』というコメントは不要だ」という話を見かけたので、ちょっと書いてみました。 まずこのコードを読んでください。 class hoge { public: //コンストラクタ hoge(); }; これを読んで、おそらく多くの人が「このコメントは必要ない」…

C++ から学んだいくつかのどうでもいいこと

C++

C++ Advent Calendar に参加してみました。 どうせ C++ の頭おかしい人達がいっぱい集まってるので、そっち方面はその辺の人に任せるとして、何かこう曖昧な話をだらだらと書いてみます。 コーディング規約について コーディング規約は、言語のコードをある…

Squirrel での開発環境を整える

最初はかなりやりにくかったのですが、いろいろ弄ってるうちに、大分開発するのが楽になってきたので、その方法をメモしておきます。 注意 このエントリーは 2010/11/8 に書かれたもので、あなたが見ているときには古くなっている可能性があります。 Squirre…

C++ でのビルド時間を短縮するいくつかの方法

C++

ある程度大きな C++ のコードを書いたことがある人なら大抵はこの問題について考えますよね。まして Boost なんて使っていた日には「コンパイル時間が Boost される」とか言われる訳です。 コンパイル時間を活用してコーヒー入れたりトイレ行ったりブラウジ…

簡易 variant を作ってみた

C++

使い方は Boost.Variant とほとんど一緒だけど、内部実装は全然違うやつ。 Boost.Variant は、テンプレート引数として渡されたデータを全部保持できる共有の領域を用意して、それを Boost.Variant オブジェクトの一部として構築する(つまり boost::variant …

プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.1

ついに出ました。 株式会社ロングゲート 自分は「Chronoライブラリで考える型システム」という題で書かせて頂きました。 内容について どんな内容かというと、ChronoというC++0xで新しく入る時間ユーティリティを通じて、型システムがいかに素晴らしいかとい…

ソートせずにコンテナを unique にする

C++

ソートしてもいいなら std::sort(v.begin(), v.end()); v.erase(std::unique(v.begin(), v.end()), v.end()); でいいんだけど、ソートしたくない場合はどうするんだろうとか思ったわけです。 でまあ、自前でアルゴリズム書くとか無理ゲーなので、こんな風に…

ニコニコ生放送

C++

ライブコーディングって楽しそうだなぁやってみたいなぁと思ってたので、ニコ生は丁度いい場所でした。 ということで最近はニコ生で、1時間ぐらいでゲーム作れたらいいなぁという感じで作ってます。 ↓に今まで作ったやつのソース置いてます。動画は諸問題を…