C++

finally

C++にはfinallyがない。 昔は不便だなぁ、と思っていたものだけど、Javaにおけるfinallyの使い方を見ると、C++にはそんなに必要ない機能だということがわかる。なぜか。それはもちろん、C++にはデストラクタがあるから。 Javaでのfinallyブロックは、「何が…

C++テンプレートとマクロでLisp

C++テンプレートでLispに触発されて作成。 lisp.h #pragma once // nil ====================================== struct nil { typedef nil eval; }; #define nil nil::eval // t ======================================== struct T { typedef T eval; }; #…

Secure String(C++版)

Secure StringのC++版を作ってみた。Java版ともっとも大きく違うのはテンプレートを使用していること。あとコンストラクタがexplicitじゃないから初期化のときに = が使えるのも大きい。 #pragma once #include <string> /* * C++版セキュアな文字列クラス。 * std::</string>…

stringクラス?

C++にstringクラスなんてない。 std名前空間の中にもない。つまりstd::stringクラスもない。でもC++で以下のようなコードはコンパイルできるし、もちろん実行もできる。 #include <string> #include <iostream> int main() { std::string str = "hoge"; std::cout << str << st</iostream></string>…

STLで順列

C++で順列を得る方法をちょっとメモ。こんな感じで。 #include <vector> #include <list> #include <set> #include <string> #include <algorithm> #include <iostream> // コンテナの出力 template <class Container> void dispContainer(const Container& c) { std::copy(c.begin(), c.end(), std::ostream_iterator<int>(std::cou</int></class></iostream></algorithm></string></set></list></vector>…

C++の新しいキャスト(の応用?)

C++ではstatic_cast、const_cast、dynamic_cast、そしてreinterpret_castといった4つのキャストによりコードをよりわかりやすくし、さらにキャスト部分の検索もしやすくなっている。 さらにテンプレートを使用した場合と同じイディオムを使用しており、拡張…

コピーさせない

C++で実体をコピーさせたくない場合、通常はコピーコンストラクタと代入演算子をprivateにしたり、boost::noncopyableを使う。 で、考えたんですが、そもそも「実体」にアクセス出来ないようにしてしまえばいいんじゃないかと。以下実装例です。 #include <iostream> /</iostream>…

スレッドクラス

C++でWin32APIをラップしたようなライブラリを作ってるんだけど、スレッド機能の実装にて。 スレッドを開始するには_beginthreadex関数を使用する 主な引数は呼び出す関数の開始アドレスとそれに渡す引数(void*型) で、関数は__stdcall呼び出し規約である必…

翻訳(C++でタイプセーフEnumパターン)

いやぁ、翻訳は結構疲れるね。 おかしいところとか、訳してないところとかあるんで是非添削してください。 っつーかコンパイルエラーになったりする部分どうしようかな。 BCC5.5とVS2005(2003も)で動くまとめページでもつくろうかな。 翻訳じゃなくてまとめ。…

C++/CLIを使ってみた

いや、使いにくいのなんのって。 一応サンプルらしきものを。 HTML版も。