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

Constructor C++ and pointer to function parameter

本文关键字:参数 指针 函数 C++ 构造函数      更新时间:2023-10-16

我对如何在 c++11 中定义一个参数作为函数指针的构造有一些疑问。我创建了收益类,用于管理给定行使价和现货价格的不同类型期权的收益。我还为几种类型的罢工定义了三个函数,具有相同的结构(参数和返回类型(和一个指向函数的指针,目的是管理这些类似的函数。这里是标题:

#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 striken";
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 &'

我恳请有人可以解释我什么不起作用

不清楚您是尝试使用成员函数指针还是常规函数指针。

它看起来像第二种情况,因为您需要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;
};