复制传递给模板函数的指针

时间:2019-07-16 18:10:58

标签: c++

我的主要功能有以下几行。

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&(这是我想的复制构造函数)。

解决问题的最有效方法是什么,或者甚至更好的方法是,除了我以外,在这种情况下采取的最佳方法是什么?

1 个答案:

答案 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 ...

}