2010-01-01から1年間の記事一覧

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

C++

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

Squirrel での開発環境を整える

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

分かる人にも分からない誰にとっても読む価値のない日記

駄文です。何も考えずに打つとこうなるといういい例です。 リンクが全然無いのはめんどいからです。 10/23 に何かいろんなものを加速してくれるらしいライブラリについての集会があるらしいという噂を聞いて、その真実を知るべく大阪へ行ってきました。 まあ…

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

C++

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

簡易 variant を作ってみた

C++

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

やりたいこともメモ

Haskell で Project Euler 解きたい(Problem 41 までしか解いてないので 100 まではやりたいところ) Programming with Arrows を読んで理解したい HLint や lambdabot を試してみたい Squirrel で簡単なゲームを作りたい(C++ や SqPlus やデバッガとの連…

Boost.勉強会 #2 に参加してきました

ついでに発表もしてきました。 Boost.Interfaces という、Boost 入りしていないというか一度提案して蹴られたらしいのと、あとこれの作者は Boost.Iostreams の作者と同じなんですけど、この人は半音信不通らしいというライブラリです。 ustream はこちら ht…

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

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

ソロ Squirrel 勉強会まとめ

をやってきました。家で。まあつまり Squirrel について調べただけなのですが。 適当にまとめていきます。 資料とか Squirrel - The Programming Language 本家さん Squirrel - Lua/組み込み系言語 Wiki* 日本語でよくまとまってるページ。 各種ページへのリ…

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

C++

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

関数のテンプレート引数を明示的に書いたかどうかで分岐する

こんな感じ。 #include <iostream> template<class T> struct identity { typedef T type; }; template<class T> void f(typename identity<T>::type) { std::cout << "type T" << std::endl; } template<class T, class... Types> void f(T, Types...) { std::cout << "deduced" << std::endl; } int main() { f<int>(10);</int></class></t></class></class></iostream>…

ニコニコ生放送

C++

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

Unicodeの相互変換

C++

これも巷に溢れてるけど、Unicodeの変換ってどうなってるのかよく知らなかったから勉強がてらに書いてみた。 //#include <cstdint> namespace std { typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; } #include <utility> #</utility></cstdint>…

汎用的な CSV リーダーを作ってみた

C++

いやまあ、もうこんなの巷にいくらでも溢れてるだろうけど。 こいつの特徴は、どのヘッダにも依存しないってこと。 iterator_traits のために を使いました。まあでも とかそういうバイナリに影響するものじゃないし、これぐらいならいいよね? テンプレート…

.svnフォルダ消したい

貰ったデータに入ってることってよくあるよね。消したいよね。とか思ったのでこんなバッチ作ってみた。 @FOR /R %%I IN (.) DO @IF "%%~nxI"==".svn" @RMDIR "%%~dpnxI" /S /Q && @ECHO removed "%%~dpnxI" 実行したバッチのフォルダより下にある .svn フォ…

const_cast の仕様

まあ調べたかったのは、const_cast して未定義動作になるのはどんな場合かってだけなんだけど、ある程度翻訳したので一応載せてみる。 式 const_cast(v) の結果は T である。もし T が lvalue reference 型か function 型への rvalue reference 型である場合…

プログラムを書くということ

C++

自分にとって、プログラムを書くということは、コンパイラに対して意味を与える作業だと考えるようになりました。 意味というのは型だったりconstだったり。あとプログラムの流れというか文脈とかもあります。 型は具体的であればあるほど、コンパイラが意味…

ローカル変数に対するconst

C++

って付けるべきなのか付けないべきなのかーと少し考えてみました。 constを付けるメリットとしてよく聞くのが、 struct Hoge { int v; void reset(int n) { v = n; } }; void f() { const int n = 100; const Hoge h = { 10 }; ... // いろいろな処理 n = 50…

array の初期化

C++

昔、ネストした配列が初期化できなくて array を使うのを諦めたのですが、 http://d.hatena.ne.jp/nagoya313/20100401/1270137582 を読んで、もしかしていけるんじゃないかと試してみました。 昔は // これは OK const int ar1[3][2] = { { 1, 2 }, { 3, 4 }…

トランプのボゴソート

ボゴソートとして52枚のトランプを投げる例が載っていますが、これが一体何回目のシャッフルでソートできる確率が 50% を越えるのかという話題があったので、やってみました。 1回の試行で揃う確率は なので、揃わない確率は で、n 回連続で揃わない確率は …

縦書き

C#

結構前の飲み会であんどちんさんと話してたときに、どういう経緯だったか忘れたのですが「与えられた文字列をできるだけ短い文で縦書きにするのなんて C# があれば余裕ですよ」みたいなことを自分が言った気がするので、今更ながらやってみました。 using Sy…

文字列リテラルの char[] 初期化

本の虫: C++0xでは、文字列リテラルから非constなポインタへの変換はできない に char* への変換はダメっていうのがありますが、char[] への変換はどうなの?という話です。 const char cs[] = "bjarne"; char s[] = "hage"; cs は当然 OK ですけど、s はど…

記録更新

C++0x では新しく allocator_traits というのが入るわけですが、このシグネチャはこうなってます。 namespace std { template <class Alloc> struct allocator_traits { typedef Alloc allocator_type; typedef typename Alloc::value_type value_type; typedef see below</class>…

デストラクタを呼ばずに再構築

C++

例えばこういうの。 void* p = new char[sizeof(int)]; int* pn = new (p) int(0); pn = new (p) int(42); // デストラクタを呼ばずに再構築 int の場合は POD 型なので問題ないことは分かりますが、例えばこんな場合はどうなるか。 struct hoge { ~hoge() {…

プリプロセス時のユーザ定義リテラルについて

C++0x で新しく追加されるユーザ定義リテラルはアンダースコアから始まってないとダメという制約がありますが、これがコンパイル時に問題にならないということは hito さんが書いています(本の虫: user defined literalが予約語の制約を無視できる理由)。 で…

リファレンスに対する add_const

以下のソースは正常にコンパイルすることができます。 BOOST_STATIC_ASSERT((is_same<add_const<int&>::type, int&>::value)); int& に const 修飾すると int& になるということです。 これは不思議で仕方がなかったので、調べてみました。 ポインタの場合はどうなるかという</add_const<int&>…

プリプロセッサデバッガ

昨日のことを適当にまとめてみる。 始まりはこのつぶやきから。 【急募】このコードがうまく動く理由 http://codepad.org/IwJ4sqA9 http://twitter.com/DecimalBloat/status/9965596581 これを見て、そういえば id:y-hamigaki さんが Boost.Wave を使ってプ…

並カン行ってきました。

C++

Twitter のまとめ→並カン2010 - Togetter #namikan タグ使った人を多分大体は放り込んでみた→http://twitter.com/melponn/namikan RT を 1 回しただけって人も、並列プログラミングには興味がある人だろうと思って一緒に入れてます。 mootoh さん(Twitter)の…