Boostで既出だったために封印されたライブラリ達。Boostに依存させたくない時に役に立つ…かも(笑)。とか言ってたら、本当に課題の時に役立ったり。
統合関数オブジェクト unified_functor |
int Minus(int i, int j){return i-j;} binary_unified_functor<int, int, int> func= Minus; int r1= func(12, 7); //i.e. r1= 12-7; func= plus<int>(); int r2= func(12, 7); //i.e. r2= 12+7; |
gcc3/BCC:ソース VC7.0以下:非対応
|
クロージャ closure |
struct A{ int f(int i){ ... } }; A a; unary_unified_functor<int, int> func= closure(&a, &A::f); int j= func(3); //i.e. j= a.f(3); |
gcc/BCC/VC7:ソース VC6以下:非対応
|
チェック付き動的型変換 checked_cast & assert_cast |
「このdynamic_castは成功する必要がある」という時に。ポインタのdynamic_castだが、キャストに失敗するとstd::bad_cast例外を発生する。boost::polymorphic_cast*3がコレですね。 assert_cast: 「このキャストが失敗するはずがない」という時に。デバッグ時はchecked_cast、リリース時はstatic_castとして働く。デバッグ時は_DEBUGをdefineしておく必要がある。boost::polymorphic_downcast*3がコレです。 |
Base* pb= ... Derived* pd= checked_cast<Derived*>(pb); |
BCC/VC:ソース gcc:未確認
|
*1 「BCC」はBCB4 Lea、BCB6 Proで確認。「VC」はVC6 Std、VC7 Stdで確認。「gcc」はgcc 2.95(cygwin)で確認。
*2 サンプルではusing、#includeを省いています。
*3 名前だけはBoostに勝ったと思う今日この頃(笑)。分かりにくいっす。
*4 ご意見はgimite@mx12.freecom.ne.jpまで。
更新履歴
クロージャをちょっと改良。 |
|