我有一个模板类型定义如下:
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 是一个具体的类型时,这个构造很好地工作。