构造函数C ++和指向函数参数

时间:2017-04-15 00:11:36

标签: c++ function c++11 pointers constructor

我对如何在c ++ 11中定义构造有一些疑问,该构造具有作为参数的函数指针。我创建了类Payoff,它管理不同类型的选项的支付给定一个罢工和一个点价钱。我还为几种类型的罢工定义了三个函数,具有相同的结构(参数和返回类型)以及指向函数的指针,以便管理这些类似的函数。标题为:

#ifndef PAYOFFb_H
#define PAYOFFb_H
#include <MinMax.h>
class PayOff
{
public:
    typedef double (*pf)(const double& Strike, const double& Spot); 
    double Call(const double& Strike, const double& Spot){ return max(Spot - Strike, 0.0); };
    double Put(const double& Strike, const double& Spot){ return max(Strike - Spot, 0.0); };
    double Digital(const double& Strike, const double& Spot){ return Spot > Strike ? 1 : 0; };
    PayOff(double Strike_, pf TheOptionsType_) : Strike(Strike_), TheOptionsType(TheOptionsType_){};
    double operator()(double Spot) const;
private:
    double Strike;
    pf TheOptionsType;
};
#endif

和身体:

#include "Payoff1b.h"
#include <MinMax.h>
double PayOff::operator()(double spot) const
{
    return (*TheOptionsType)(Strike, spot);
};

使用以下主要代码:

int main()
{ 
double Strike;
cout << "\nEnter strike\n";
cin >> Strike;
PayOff callPayOff(Strike, PayOff::Call);
PayOff putPayOff(Strike, PayOff::Put);
PayOff digitalPayOff(Strike, PayOff::Digital);
return 0;
}

我为构造函数收到此错误:

[...] error C2664: 'PayOff::PayOff(const PayOff &)' : cannot convert argument 1 from 'double' to 'const PayOff &'

我很想问是否有人可以解释我什么不起作用

1 个答案:

答案 0 :(得分:0)

目前尚不清楚是否正在尝试使用成员函数指针或常规函数指针。

看起来像第二种情况,因为您需要CallPutDigital是静态的:

class PayOff
{
public:
    typedef double(*pf)(const double& Strike, const double& Spot);
    static double Call(const double& Strike, const double& Spot)
    {
        return max(Spot - Strike, 0.0);
    };
    static double Put(const double& Strike, const double& Spot)
    {
        return max(Strike - Spot, 0.0);
    };
    static double Digital(const double& Strike, const double& Spot)
    {
        return Spot > Strike ? 1 : 0;
    };
    PayOff(double Strike_, pf TheOptionsType_) : Strike(Strike_), TheOptionsType(TheOptionsType_) {};
    double operator()(double Spot) const;
private:
    double Strike;
    pf TheOptionsType;
};