【问题标题】:How to make an enum recognized by other classes如何使其他类识别的枚举
【发布时间】:2020-05-19 16:25:38
【问题描述】:

我正在我的 SimulationEngine 基类中创建一个名为 RiskFactor 的枚举。

class SimulationEngine
{
public:
    enum RiskFactor { interest_rate, equities, volatility };
    SimulationEngine(double horizon, Wrapper<valuationFunction>& theFunction_, RiskFactor simulatedRiskFactor);
    virtual void DoOnePath(double vol, double normvariate) = 0;
    virtual SimulationEngine* clone() const = 0;
    const virtual double GetHorizon();
    const Wrapper<valuationFunction>& GetFunction() const;
    RiskFactor simulatedRiskFactor;
protected:
    double horizon;
    Wrapper<valuationFunction> theFunction;
};

在派生类中,我有这个方法,在调用对象“TheFunction”的方法时使用 RiskFactor 枚举类型的“simulatedRiskFactor”。

void OneStepBSEngine::DoOnePath(double vol, double normvariate)
{
    double variance = vol * vol * horizon;
    double rootVariance = sqrt(variance);
    double itoCorrection = -0.5 * variance;
    //double movedSpot = spotvalue * exp(drift * horizon + itoCorrection);
    //spotvalue = movedSpot * exp(rootVariance * normvariate);
    double factor = exp(drift * horizon + itoCorrection + rootVariance * normvariate);
    theFunction->RiskFactorMultiply(factor, simulatedRiskFactor);
    return;
}

我应该如何让“theFunction”类寻找它来识别枚举并允许我写最后一行(尚未工作):

theFunction->RiskFactorMultiply(factor, simulatedRiskFactor);

这个类目前是这样的:

class valuationFunction
{
public:
    valuationFunction(double TTM);
    virtual void ValueInstrument() = 0;
    virtual double GetValue() const;
    virtual void RiskFactorAdd(double increment) = 0;
    virtual void RiskFactorMultiply(double factor) = 0;
    virtual void UpdateTTM(double timeStep);
    virtual valuationFunction* clone() const = 0;
    virtual ~valuationFunction() {}
private:

protected:
    double f;
    double TTM;
};

我希望能够使用枚举 RiskFactor 调用 RiskFactorAdd 和 RiskFactorMultiply 函数。

【问题讨论】:

    标签: c++ enums switch-statement


    【解决方案1】:

    RiskFactorMultiply 的声明需要用封闭类名限定枚举名。

    class valuationFunction
    {
    // ...
        virtual void RiskFactorMultiply(double factor, SimulationEngine::RiskFactor risk) = 0;
    // ...
    };
    

    这同样适用于枚举值,例如 RiskFactorMultiply 想让第二个参数可选。

        virtual void RiskFactorMultiply(double factor, SimulationEngine::RiskFactor risk = SimulationEngine::volatility) = 0;
    

    【讨论】:

    • 是的,谢谢你,这正是我想要弄清楚的
    猜你喜欢
    • 1970-01-01
    • 2013-09-19
    • 2012-09-25
    • 2022-08-19
    • 2021-10-24
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多