次のように定義されたテンプレートタイプがあります。
template<class TCoupon>
class CatBond : public Instrument {
public:
class arguments;
class engine;
//actual content
}
そして、私はこれをしたい:
template<class TCoupon>
class CatBond<TCoupon>::engine :
public GenericEngine<CatBond<TCoupon>::arguments,
CatBond<TCoupon>::results> {};
ここで、GenericEngineはQuantLibライブラリで定義されており、次のように操作しようとしています。
template<class ArgumentsType, class ResultsType>
class GenericEngine : public PricingEngine,
public Observer {
public:
PricingEngine::arguments* getArguments() const { return &arguments_; }
const PricingEngine::results* getResults() const { return &results_; }
void reset() { results_.reset(); }
void update() { notifyObservers(); }
protected:
mutable ArgumentsType arguments_;
mutable ResultsType results_;
};
ただし、これはコンパイルされません。
Warning 1 warning C4346: 'Oasis::CatBond<TCoupon>::arguments' : dependent name is not a type c:\users\ga1009\documents\dev\oasis\catbonds\CatBond.h 213
Error 2 error C2923: 'QuantLib::GenericEngine' : 'Oasis::CatBond<TCoupon>::arguments' is not a valid template type argument for parameter 'ArgumentsType' c:\users\ga1009\documents\dev\oasis\catbonds\CatBond.h 213
どうすればそれを機能させることができますか?この構成は、CatBondが具象型の場合にうまく機能しました。