C++

文字列と相互変換できる列挙型(enum)

stringとenumを双方向で変換できてかつPODなのが欲しくなったので書きました。内部の変換テーブルにはboost::bimapを使っています。特徴としては 双方向に変換できる 実行時 POD型 boost::bimapなので速い(後述) などです。 使用例 ENUM_UTILの実装は(長…

GCCのOpenMP実装(libgomp)のライセンス

最近gccでOpenMPを使っていて、ふとライセンスが気になったので調べてみました。ただし私は法律の専門家ではないので、正確な情報はライセンスの原文を見て判断してください。そもそも、gccでC++のコードをコンパイルすると、OpenMPとは関係なくlibstdc++やl…

初めてOpenMPを使ってみて気づいたこと

最近、あるプログラムを並列化して速度を上げるためにOpenMPを使っています。ネット上で検索するとOpenMPの入門記事はあっても実際に使ってみたよ、というのは多くないようなのでそのときに気づいたことなどを書いてみました。 OpenMPと他の並列化技術との比…

boost::logはmutable_constantをshallowコピーする

boost::logのloggerとそれに紐付いたmutable_constantをコピーしようとしてハマったのでメモ。 deepコピーがしたかったのだけど、結果はタイトル通りshallowコピーだった。ドキュメントにもよく読んだら書いてあった。 The shared pimpl design comes signif…

QtのPhononモジュールで動画再生

QtにはPhononというクロスプラットフォームなマルチメディアAPIが付属しています。PhononはもともとKDE向けに開発された、DirectX・QuickTime・GStreamerなどのバックエンドを抽象化するAPIで、音声や動画の再生を簡単に行うことが出来ます。 今回は早速、動…

QtWebKitがすごすぎる

最近Qtを使い始めたのですが、QtにはQtWebKitというWebKitベースのブラウザエンジンが付いています。 せっかくなので遊んでみよう、と思ったらあまりに簡単で驚いたので紹介です。 #include <QApplication> #include <QtWebKit> int main(int argc, char* argv[]) { QApplication app</qtwebkit></qapplication>…

オブジェクトの初期化と代入

C++

ライブラリを書いていると、自作のクラスを便利に使えるようにコンストラクタ・コピーコンストラクタ・コピー代入演算子をたくさん用意したくなることがあります。でも、これらが一体いつどこで呼ばれるのか資料が少なかったので、また仕様書を読んでみまし…

テンプレート関数のオーバーロード解決とSFINAE

C++

自作のライブラリを書いていて、SFINAE(Substitution failure is not an error)の詳細が知りたくなった。仕様書を読んだので以下にメモ。 テンプレート関数のオーバーロード解決規則 あるテンプレート関数の呼び出しに対して、オーバーロードされた関数の…

C++でURLエンコード/パーセントエンコード

ネットで見つけたものがうまく動かなかったから自分で書いた。space_to_plusをtrueにするとスペースが(%20ではなく)+記号になるようにした。 #include <string> #include <sstream> #include <iomanip> std::string url_encode(const std::string& str, bool space_to_plus = false) </iomanip></sstream></string>…

CMakeのビルド構成の設定

C++

Makefileを書くのが面倒になったので、CMakeを使ってみた。 デバッグモードやリリースモードのようなコンパイルのモードを指定できないか調べたところ、CMakeLists.txtに set(CMAKE_CXX_FLAGS "") set(CMAKE_CXX_FLAGS_DEBUG "-g -pg") set(CMAKE_CXX_FLAGS_…

gccのプリコンパイル済みヘッダ

C++

昨日の続き。gccのプリコンパイル済みヘッダ(PCH)がかなり速いことに気づいたけど、日本語の資料が少ないので本家のマニュアルを読んだ。結構複雑だったから下にメモしておく。 作り方 foo.hのプリコンパイル済みヘッダを作る場合、普通にコンパイルするよ…

ビルド時間の短縮

C++

Boostは便利だけど、ちょっと使っただけでビルド時間が一気に長くなってしまうので、何とかならないか調べてみた。まず、最近のgccではプリコンパイル済みヘッダ(PCH)が使えるらしい。しかし、ヘッダをプリコンパイルしたときのオプションが本番のコンパイ…

ICFP 2009 Programming Contest

C++

結果が出たようです。 http://icfpcontest.org/scoreboard.php 私(C--)は111位でした。VMの実装に手間取ったことと、「入力を行うプログラムを書く→実行する→プログラムを修正する」のサイクルに時間をとられたのが失敗かなぁ。シミュレーションなので実行…

C++0x Standard Library wishlist

C++

C++0x Standard Library wishlist (revision 5)というのを発見しました。この中には具体的な提案が既にあるものから曖昧な希望まで入っているらしく、素敵なことになっています。でも、この辺りのものがBoostに出揃ってくればかなり便利になりそうな気が・・・…

クラスのメンバ関数内のstatic変数

C++

インスタンスごとに存在するんだと思ってた。実際にはクラスに所属する(staticメンバ変数やグローバル変数と同じで一つだけ)らしい。完全に思い違い。

未解読文書一覧

C++

読みたいもののメモ。 More C++ Idioms Blitz++作者のページの文書 特にTechniques for Scientific C++とか。 なんかどれも一部で有名、世間でマイナーな気が。

boost::asioはもっと評価されるべき

C++

boost::asioはネットワークメインの非同期入出力ライブラリです。以前から知ってはいたのですが、使ってみたら予想以上に便利でした。iostream風になってるだけでこんなに便利とは。 クライアントの例はLet's Boostに有るので、サーバの例を。コンパイルには…

画像処理ライブラリ

C++

画像処理ライブラリのメモ。 GIL(boost::gil) 元はAdobeがオープンソースで公開したもので、Boostが取り込んだ。 画像のフォーマット依存な部分をテンプレートで抽象化して隠すのが目的。なので提供している機能はかなり低レベル。 OpenCV Intelがオープン…

Boost 1.36 リリース

C++

Boost 1.36がリリースされました。 http://www.boost.org/users/news/version_1_36_0 新しく追加されたライブラリは Accumulators Exception Units Unordered です。 内容はLet's Boostにすでに紹介が出ています。 Unorderedはハッシュを使うコンテナで、標…

ICFP 2008 Programming Contest

C++

Final Roundの途中結果が出ています。 http://www.icfpcontest.org/results/final/index.html 私(suzumiyaharuhiko)は5回戦で脱落。 アルゴリズムは 普段は左回りで回転してホームを向いて加速・前進 障害物を見つけたらブレーキしつつ右回りで回転してよ…

std::stringとstd::wstringの相互変換

C++

ポータブルで簡単な方法を探していたら、 http://ml.tietew.jp/cppll/cppll/article/4783 がよさそうだったけど、バグがあったのでいろいろ修正してみた。 #include <cstdlib> #include <string> //ワイド文字列からマルチバイト文字列 //ロケール依存 void narrow(const std:</string></cstdlib>…