私は
class BC_TOYFD
{
public:
BC_TOYFD( BS_TOYFD * pBS, BC2 dBC2 );
virtual ~BC_TOYFD( void ) ;
BS_TOYFD * _pBS ;
BC2 _dBC2 ;
double _PDA ; // store price down approximation
double _PUA ; // store price up approximation
virtual void COMPUTEBVDOWNFOR( PAYOFF_TOYFD * pPAYOFF, double * attime ) = 0 ;
virtual void COMPUTEBVUPFOR( PAYOFF_TOYFD * pPAYOFF, double * attime ) = 0 ;
};
から派生する
class DIRICHLET_TOYFD : public BC_TOYFD
{
public:
DIRICHLET_TOYFD( BS_TOYFD * pBS, BC2 dBC2 ) ;
~DIRICHLET_TOYFD( void ) ;
void COMPUTEBVDOWNFOR( PAYOFF_TOYFD * pPAYOFF, double * attime ) ;
void COMPUTEBVUPFOR( PAYOFF_TOYFD * pPAYOFF, double * attime ) ;
};
メソッドが欲しい
void DIRICHLET_TOYFD::COMPUTEBVDOWNFOR( PAYOFF_TOYFD * pPAYOFF, double * attime )
と
void DIRICHLET_TOYFD::COMPUTEBVUPFOR( PAYOFF_TOYFD * pPAYOFF, double * attime )
pPAYOFF のランタイム タイプに応じて処理を実行しますが、
dynamic_cast<>
通常、
void DIRICHLET_TOYFD::COMPUTEBVDOWNFOR( PAYOFF_TOYFD * pPAYOFF, double * attime )
次のようなことをします
_PUA = something if the runtime type of pPAYOFF (which is an abstract class) is for instance CALL_TOYFD
と
_PUA = something else if the runtime type of pPAYOFF (which is an abstract class) is for instance PUT_TOYFD
ここで、CALL_TOYFD と PUT_TOYFD は、PAYOFF_TOYFD から派生した public です。その後、次のようなものを書きたいと思います
double approx = bc->COMPUTEBVDOWNFOR( pPAYOFF, attime ) ;
ここで、bc は BC_TOYFD のインスタンスであり、pPAYOFF は PAYOFF_TOYFD へのポインターであり、実行時に bc と pPAYOFF の正しい型が解決されるようになっています。
他のヒント/精度なしで、「ダブルディスパッチ」または「逆ダブルディスパッチ」パターンを使用するように言われました。正確な方法を知らずに、このフレームワークに実装しようとしました。ちなみに、私は BC_TOYFD から派生した DIRICHLET_TOYFD のような「他の」クラスを持ちます。そのためには、解決しようとしている問題と同じ問題を保存する必要があるため、私の場合は二重ディスパッチが実践されていると思いますこの制約を考慮する必要があります。
どんな助けでも大歓迎です!
どうもありがとう !