新しいキャスト関数を考えてみた
template<typename To, typename From> To kami_cast(const From&);
kami_castテンプレート関数は、放送時に引数を指定した型に変換する。キャスト後の型に対して引数のチョイスが神がかっていない場合、このキャストは失敗し、bad_castから派生したmiss_cast例外を送出する。
なおこのテンプレート関数は、近年のGhibriAnimationを継承したクラス内で呼び出すと必ず失敗する。
使用例:
moka = kami_cast<MokaAkashiya&>(head); // OK, 水樹奈々を赤夜萌香にキャスティングすることは神がかっているので、キャストは成功し、我々のテンションを上げる minoru = kami_cast<MinoruShiraishi&>(sebastian); // OK, ただし実際には何も起きない(引数、戻り値ともにMinoruShiraishi型) taniguchi = kami_cast<Taniguchi&>(minoruShiraishi); // OK, ただし実際には何も起きない(TaniguchiはMinoruShiraishiのtypedef) mizuho = kami_cast<MizuhoAyanoKoji&>(hocha); // NG, どう考えてもメイン5人は陰謀としか思えない。キャストには失敗するが、何故か作画クォリティが異常に高かったので問題ない anyChar = kami_cast<AnyCharacter&>(kanetomo); // NG, コンパイルエラー。金田朋子はキャストできない。
アホくさ。
えんいー