実験
Microsoft の kinect SDK をダウンロードしてくると,インストールは簡単だし,Visual Studio でサンプルプログラムを簡単にコンパイルして実行できる.しかし,コードはそれなりに煩雑で(と言っても1000行程度だが),自分でアプリを作る場合にどこから始…
C++ でメンバ関数を部分特殊化しようとすると(例えばテンプレートクラスのテンプレートメンバ関数を,ある特定の型について特殊化する),コンパイルエラーとなる.gcc なら "error: invalid use of incomplete type" だとか, "error: enclosing class tem…
先日の記事で扱った問題の対処法について.結論:テンプレートクラスの(部分)特殊化を行う場合は,そのテンプレートクラスを宣言しているヘッダファイルで「(部分)特殊化の宣言」を行うこと.部分特殊化の実装は,通常のクラスまたはメンバ関数の実装と同様…
テンプレート関数の明示的インスタンス生成で解説したように,テンプレートクラスとかテンプレート関数を明示的にインスタンス化しておくことで, ヘッダファイルの肥大化(コンパイル速度の低下) 望ましくない実装の公開 といった問題を避けられる.一方,…
ちょっとした実験. namespace A {...} namespace B { namespace A {...} ... } のように,既に存在している名前空間 A と同じ識別子の名前空間を,別の名前空間 B の中に作ることはできるか? また,作られた場合どうやってアクセスするのか? を調べる.
すぐ忘れるので,メモ. inline 関数は,先行宣言しておくことで,定義が使用場所より後にある場合でも問題なく使える.
過去記事「テンプレートの部分特殊化を利用した間接参照型推定」では,テンプレートのテンプレートの部分特殊化 (Wikipedia)を使ってポインタ型やイテレータ型からそれを間接参照した型(ポインタを取った型)を推定する方法を紹介した.この方法を使って,…
liboctave を使っていると,例えば要素数の異なる列ベクトルを足そうとしたときに fatal: operator +: nonconformant arguments (op1 len: 2, op2 len: 5) というエラーが発生し,プログラムが正常終了する.正常終了とは exit(1) による終了で, コアファイ…
C/C++ で,エラーを検出してプログラムを強制終了する場合, exit(EXIT_FAILURE) とか abort() を使う.このうち abort() はコアを吐いてから終了してくれるから(linux の場合),コアを gdb などで解析することにより,デバッグが楽になる.例えば gdb a.o…
適当な構造体 TTest のインスタンスが const で修飾されているとき(const TTest x),そのメンバに値を代入したい,でもそのためだけにそのインスタンス(x)から const を外すのは嫌,という場合を考えよう.あるいは const メンバ関数(メンバ変数を変更し…
メモリの二重解放とは, new などで確保したメモリ領域(ヒープ領域)を2回 delete などで解放することを言う. new と delete をきちんと対応させて書いていないときに起こる問題だ.特にクラスのメンバに動的確保したメモリへのポインタを含む場合にやって…
戻り値が void 型である関数 func1 を,戻り値が void 型であるほかの関数 func2 において, return func1(..); のように返せるか実験してみた.
C++の機能,テンプレートの部分特殊化 (Wikipedia)を使って,あるポインタ型orイテレータ型から,それを間接参照した(or逆参照した,orポインタをとっぱらった)型を推定する方法を紹介する.
デフォルトパラメータを持つ仮想関数を継承する場合の振る舞いを調べてみた.仮想関数は「動的に結合」される一方,デフォルトパラメータは「静的に結合」される.
C++ で実装した関数を C から利用したい場合,あるいはその逆の場合がある.同じソースの中に両方のプログラムコードを書くことはできないが,それぞれのソースをコンパイルしてオブジェクトファイルを生成し,それらをリンクすることは可能だ.ただし C++ …
iomanip の setw(5) みたいなノリで,出力する文字に色をつける方法を考える. cout<