C/C++

C++0x VS2010/g++4.5共通で使用可能な機能

auto lambda Rvalue references (without for *this) decltype Right angle brackets Local and unnamed types as template arguments Extern templates Static assertions

Qtでアイコン取得

// システムアイコンの取得 QIcon icon = QCommonStyle().standardIcon(QStyle::SP_HOGEHOGE); // ファイルに設定されたアイコンの取得。 QIcon icon = QFileIconProvider().icon(QFileInfo(FILENAME)); ディレクトリのアイコンはシステムアイコンに含まれて…

C++の仮想メンバ関数。主に仮想デストラクタ。

先日、継承の階層が3層(親・子・孫)となっている場合、子のクラスのデストラクタにvirtualは必要なのか気になったので実験してみました。 ついでにデストラクタ以外の普通のメンバ関数についても検証。 まず以下のようなクラスとmain関数を用意。 #include <iostream></iostream>…

QtScriptがすごく面白そう

だいぶQtにも慣れてきたのでQtScriptをいじり始めてみました。 QScriptEngine engine; QString script("1+2"), result; result = engine.evaluate( script ).toString(); これでresultに文字列の3がセットされます。 QtScriptはECMA Scriptをベースにしてい…

new A;した時にAのコンストラクタが例外を投げたらどうなるのか

C++でコンストラクタから例外を送出したい時 - 足跡の解決編です。 手元にあったC++Effective第三版の最後の方のページに全ての答えが書いてありました。 買った本はちゃんと全部読まないとダメですね。 コンストラクタから例外を送出する可能性のあるクラス…

C++でコンストラクタから例外を送出したい時

きっと今年最後の思いつき。 一般にコンストラクタから例外を投げるとリソース漏れの危険性が出てくる。 例外を投げた当のオブジェクトが自身のリソースをきちんと処理していなかったり、コンストラクタから例外を投げるクラスをnewした時にインスタンスが宙…

属性?みたいなの

メソッドでの場合はすぐ忘れるからメモ。 virtual - クラス定義の中でだけvirtualを書く。 static - 同上。 inline - クラス定義内で定義したメソッドには不要。そうじゃない場合は同一ファイル内で関数定義してる場合のみ有効。

'hoge::hoge' will be initialized after

コンストラクタ初期化子の順番と、メンバの宣言順が違うと発生するwarningだとかだそうで。 理由とかは下記ブログに書かれていたので割愛。 initialized after - blanket log

Linux&gccでのライブラリの作り方

静的ライブラリ gcc -c hogehoge.c でオブジェクトファイルを作った後に ar rcs hogehoge.a hogehoge.o でhogehoge.oをhogehoge.aに追加する。 hogehoge.aが無ければ勝手に新しく作ってくれる。 動的ライブラリ gcc -g -Wall -fPIC -c hoge.c gcc -g -Wall -…

libpng

OpenGLはちょっとあっちの方に置いといて、libpng触ってます。 libpng.txt、ではなくて日本語訳をしてくださっていた素晴らしい方がいらっしゃったので、そちらを読ませて頂いて進めています。 今のところ日本語訳を読ませて頂いてるからまだ何とかなってま…

バイトオーダー

今までテキストファイルしか扱ってこなかったんで、初めてまともにバイナリファイルをいじったら見事にバイトオーダーで詰まりました。 x86プロセッサにおいて、メモリ上のデータはリトルエンディアンで並んでいます。 そこにint型の変数xを確保します。 xに…

QtでOpenGL - その3

GLUTによる「手抜き」OpenGL入門 が最後まで終わりました。 図形の描画はともかくとして、視点周りでかなり混乱・・・。 床井先生の書かれてる超基本編だけなら問題は無かったのですが、gluPerspectiveをglFrustumに変更するときにglOrthoと同じようなもん程…

QtでOpenGL - その2

GLUTによる「手抜き」OpenGL入門 を参考に多分2日目くらい。9.アニメーションまで終わった。 とりあえず立方体を三角関数使って簡単にアニメーションさせて喜べるようになりました。 関数名とかは当該ページを見れば分かるから考え方をメモ。 座標変換プロ…

qmakeを使うときの微妙なtips

書いてから思ったけど、tipsでは無い。1つしか書かないから。 qmake -projectする度に、自分が後からproファイルに追加した変更は消えてしまう。 20文字くらいしか足さないならいいけど、あれこれIncludeパスとか追加したりしたときは追加作業が余りにも面倒…

QtOpenGLモジュール使ってOpenGL

QtのQtOpenGLモジュールを使ってみました。 何故かあんまり日本語情報無いのね。 おかげでサンプルの謎な部分が何やってるのか検索かけてもさっぱり出てこない。 みんな違うの使ってるのだろうか。 当面はソースとにらめっこすることになったりするかもしれ…

C/C++修行(4日目)

最近PerlとかPHPとかjsとかLLばっかりだったので、最近基本に戻ってC/C++で修行中。 といっても細かいアルゴリズムの確認しながら何か適当に組むっていう程度。 しかしLLから久しぶりに戻ってくるとエラーの宝庫みたいなコードを書いてしまう。 おまけに流れ…

Qt4:QStringをchar*にする方法と日本語を使えるようにする方法

#include <iostream> #include <QString> #include <QTextCodec> int main(int argc, char *argv[]){ // utf-8な文字列をQStringが受け付けるようにする。 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); // utf-8な文字列をtr()が受け付けるようにする。 QTextCodec</qtextcodec></qstring></iostream>…

gcc/g++でのライブラリの指定の仕方

参考:ƒ‰ƒCƒuƒ‰ƒŠ‚ÌŠî‘b’mŽ¯ -lオプションは、 libfoo.so libfoo.a の順にライブラリを探してリンクする。 -Lオプションは、リンク時に一時的にライブラリディレクトリのパスを一覧の先頭に追加する。 強制的にスタティックライブラリを使用する場合は以下の…

Windowsでシンボリックリンク張るユーティリティ作ってみた

単にコマンドライン引数取ってWin32APIのCreateSymbolicLinkに投げただけ。 DOS窓以外から使う事にこだわらなければDOSにmklinkって内蔵コマンドがあるからそれを使うとお手軽気楽。 なお、OSの都合上Vista以降じゃないとシンボリックリンクは作れません。 …

VS2008での64bitネイティブバイナリ作成用の設定

プロジェクトのプロパティ設定ダイアログを開き構成マネージャを開く。 ドロップダウンではないリスト表示になっている所の64bit設定したいプロジェクト行のプラットフォーム列の項目をクリック。 新規作成を選択。 x64に設定。各種設定をwin32からコピーす…

warning! warning!! warning!!!

VCFをそのまま日本語版VisualStudioでビルドすると色々warningが出ます。 エラーは出ないのでビルドには失敗はしません。 なお、ここで出るwarningのうち、 FoundationKit.h GraphicsKit.h Control.h StringUtil.h のヘッダファイルで出る文字コード関連のwa…

VCFのあれこれ追記

オンラインリファレンス http://vcf-online.org/docs/ref_manual/index.html ライセンスについて http://vcf-online.org/license スタティックライブラリとDLLの2種類用意してあるって話のようだが、どれがDLL読み込み用libファイルでどれが中身入りlibファ…

Visual Component Framework

WindowsでGUIアプリを作る際に、Win32API直叩きは面倒過ぎるし、WinFormsもWPFも重いし、MFCとかは未来無いし、だからって自作ライブラリ作っても大した汎用性持たせられないし、ということで他に良いWindows用GUIライブラリは無いかと探していたら、良さそ…

gtkmm/GUIプログラミング - 2

今回はwidgetをクラスで表現してそれを表示するところまで書いてみます。 何はともあれ例から。 #include <gtkmm/main.h> #include <gtkmm/window.h> #include <gtkmm/button.h> class MainWindow : public Gtk::Window { Gtk::Button mButton; public: MainWindow(); ~MainWindow(); }; MainWindow::MainWi</gtkmm/button.h></gtkmm/window.h></gtkmm/main.h>…

gtkmm/GUIプログラミング - 1

CではなくてC++で書きたいという理由でGTK+をすっ飛ばしてgtkmmを使い始めてみました。 日本語の満足いくチュートリアルがパッと見つからなかったのでここのドキュメントページに載ってるチュートリアルっぽいリファレンスと格闘中。 とりあえず、ここまで学…

関数ポインタ

すぐやり方を忘れるので覚えているうちにメモ。 void hoge(){} namespace foo{ void piyo(){} } class bar { public: void boon(){} static void ban(){} }; // typedef 戻り値 ポインタの型名(引数リスト); 引数部分の書き方はC/C++の文法に準じる。 typede…

segmentation fault

セグメントはメモリ上に特定のデータ量でコード及びデータが展開された領域のこと。 んでここから外れた所をポインタで参照したら出るエラーが「segmentation fault」。

変数に放り込める最大値を知る。

unsignedな変数ならsignedにキャストして-1を放り込んでunsignedに戻せば達成できます。*1 ですが、コンパイラに付属のヘッダファイルから直値で知れればそっちの方が処理速度は上がります。 ってことで、各変数に放り込める最大値がマクロで定義されている…

コーディングスタイルメモ

変数・定数・関数の命名規則 - 2008年10月19日版。 変数 グローバル変数は g_ を接頭辞にする。 自動変数は a_ を接頭辞にする。 関数引数は i_ を接頭辞にする。 static変数は s_ を接頭辞にする。 クラスのメンバ変数は m_ を接頭辞にする。 一時変数*1は …

C++での多次元配列の作り方

今日久しぶりにC++やってnew char[x][y]って書いたらコンパイラに怒られたのでメモ。 1:コンパイル前に大きさが決まってる場合。 char str[5][5]; 2:コンパイル後に動的に大きさをコントロールする場合。 int x = 5; int y = 5; char **str; str = new cha…