例外クラスを外から指定

昨日適当に書いたC++の例ではだめでした。

#include<cstdio>

class exception
{
  virtual void dummy(){} //for VMT
};

void func(exception const & error)
{
  throw error;
}

int main()
{
  class a : public exception { };
  try{
    func(a());
  }catch(a&){
    std::printf("OK");
  }catch(exception&){
    std::printf("BAD");
  }
  return 0;
}

単純に参照渡しでいいやーとか思ってたのですが、BADが表示されます。もう一工夫必要ですね。別にC++で使いたいわけではないので、どうでもいいっちゃどうでもいいのですが、とりあえず昨日のコードは紛い物です。

ちなみにDelphiなら単にクラス参照を渡すだけ。メタクラスがあるとこういう時楽です。Adaの場合はexceptionを渡す方法がgenericにすら無い(無さそう)のが…望む例外を発生させる関数を作って渡すという手段ならいけそうですが…いや、例外とその例外をraiseする関数を組にしてgenericにして、渡していけばそれでいいか。