XAPOのインターフェイスを自動生成したい
というのも、XAPOの処理は基本的なものであればXAPO::Processをオーバーライドしてちょっとした操作をするだけだからです。
それ以外のメソッドはCXAPOBaseなどが用意する基本的な処理だけで十分事足ります。
// ゲイン値を半分にするだけ class gain_cut : public CXAPOBase { public: void Process( ... ) { ... for( UINT32 i = 0 ; i < Frame ; ++i ) Buffer[i] *= 0.5f; ... } };
コンストラクタなどもCXAPOBaseなど実装を用意すればほぼ一緒になりますし、重複箇所だらけです。
だとするならば、関数オブジェクトや関数を渡してインターフェイスは自動的に作成してくれると嬉しい訳です。
// 関数オブジェクトなどに応じて自動生成されるクラステンプレート template< class Func > class xapo_auto : public CXAPOBase { ... }; template< class Func > IXAPO* create_xapo() { return new detail::xapo_auto<Func>(); } // ゲイン値を半分にする関数オブジェクト struct gain_cut { void operator()( ... ) { ... }; }; IXAPO* p = create_xapo<gain_cut>();
といったような。とりあえずfunctionとして渡せるものならば全部渡してやりたいですね。
ただ、制約が色々と。例えば関数の引数は固定になっちゃったりとか、パラメータを持つ(IXAPOParamtersを継承する)ものだったら新しいパラメータは返却するのか、それとも参照としておくのか。クラスIDはどうするのか、といったようなのもありますね。
いろいろ問題はあるのですが、関数を渡してXAudio2で使えるエフェクトクラスを自動生成できるのは魅力なのでちょっと挑戦してみたいですね。
※良く分からないコードになってので修正。失礼しました…。