我的主要功能有以下几行。
BlackScholesPricer* option = new EuropeanCallOption(105, 100, 0.5, 0.1, 0.36, 0);
PricingUtil::mesh_pricer<EuropeanCallOption>(option, 105, 150, 5);
这是有问题的功能。
template <typename OptionType>
std::vector<double> PricingUtil::mesh_pricer(BlackScholesPricer* option,
std::size_t lower_bound, std::size_t upper_bound, std::size_t mesh_size) {
OptionType financial_instrument(*option);
std::vector<double> generated_prices;
for (std::size_t price = lower_bound; price <= upper_bound; price += mesh_size) {
financial_instrument.asset_price(price);
generated_prices.push_back(financial_instrument.price());
}
return generated_prices;
}
我想将派生类BlackScholesPricer传递给该函数,但是我不想修改传递给该函数的对象,因此我试图创建它的副本。我收到一条错误消息,指出不能将BlackScholes *类型的对象转换为const EuropeanCallOption&(这是我想的复制构造函数)。
解决问题的最有效方法是什么,或者甚至更好的方法是,除了我以外,在这种情况下采取的最佳方法是什么?
答案 0 :(得分:5)
由于您正在处理模板函数,因此在着手实现多态克隆方法之前有几种可能性:
PS C:\Users\zzz> (Get-Date $date).AddDays(0).ToString("MMddyyyy")
07162019
PS C:\Users\zzz> (Get-Date $date).AddDays(-1).ToString("MMddyyyy")
07152019
template <typename OptionType>
std::vector<double> PricingUtil::mesh_pricer(BlackScholesPricer* option,
std::size_t lower_bound, std::size_t upper_bound, std::size_t mesh_size) {
// note: it seems that you are sure that this is the actual type
OptionType financial_instrument(*static_cast<OptionType*>(option));
// your code goes here ...
}
template <typename OptionType>
std::vector<double> PricingUtil::mesh_pricer(OptionType* option,
std::size_t lower_bound, std::size_t upper_bound, std::size_t mesh_size) {
OptionType financial_instrument(*option);
// your code goes here ...
}