ジリジリ照り付ける太陽の下、書泉ブックタワーまで書籍の買い出しに行く。会社用として買ったのは右にある4冊。C++本の
ランゲージと
ライブラリはokaさんのリクエスト。
boost本は先日の
anyの件もあるし1冊はあった方が良いと思い購入。最後の一冊は萌え本
「解析魔法少女 美咲ちゃん マジカル・オープン」…う~ん…(^^;;
いや別に萌え本が好きって訳じゃ無いんですが、クラッキングに関する本なので情報セキュリティソフトの開発に役立つかなと思って買ったのでした。しかしこれは電車の中では読めんなぁ。(と言いつつ
こんな本は電車の中で読んでいたりするが、これは萌え本じゃ無いしぃ。) マジカル・オープンは会社の中で熟読しましょう。最近萌え本増えたなぁ。
boost本は2ch辺りじゃ「単にまとめただけ」との評もあったようですが、これだけの量をまとめるだけでも大変だと思うぞ。リファレンスは無いと不便なので1冊はあっても良い本でしょう。
と言う事で
うちの会社は書籍代はケチらない方針です。なので買いまくっている気がするが、気のせいだろう。
プログラマの日記とか書きながら
[プログラミング]カテゴリーの投稿が1つも無かった。いかんいかんと言う事で初投稿をば。
C++で色々な機能を持つクラス群を管理するクラスを書いていた。共通な項目は管理クラスに書いて実際の機能クラスへのポインタを管理して、管理クラス自体はstd::vectorで管理して…と考えた。テンプレートを使えば管理クラスで各種機能クラスへのポインタを持たせる事は簡単だが、テンプレートでは使用時に確定してしまうので同じvectorでは管理出来ない事に気付く。
う~むどうしたものか…機能クラスへのポインタはvoidポインタにしてしまおうか…でもそれではあまりにもあんまり。と言う事でokaさんに相談してみた。なんか
boostでそんな機能があったような…と調べてくれたのが
boost::anyでした。例えば、
static char* hw = "hello world.";
boost::any a, b;
a = 100; // 整数を入れる
b = hw; // 文字列を入れる
a = b; // any同士の代入
b = Point(10,20); // ユーザー定義型でも入っちゃう
と何でも入ってしまう、さすがエニー。なおPointはユーザ定義の型。これを使う時には例えば、
Point c = boost::any_cast<Point>(b);
とany_castを使ってキャストすれば良い。う~ん便利!しかも失敗するとちゃんと例外も投げてくれる。このboost::anyを使って目的のクラスの実装は無事完了したのでした。自分でも似たような物は作れなくも無い気がするが、こちらの方がエレガントで使い易い。作者様に感謝しつつ使わせて頂きます。