c++ - 如何使其他类识别的枚举
问题描述
我在 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 函数。
解决方案
的声明RiskFactorMultiply
需要用封闭的类名来限定枚举名。
class valuationFunction
{
// ...
virtual void RiskFactorMultiply(double factor, SimulationEngine::RiskFactor risk) = 0;
// ...
};
这同样适用于枚举值,例如,如果RiskFactorMultiply
想让第二个参数可选。
virtual void RiskFactorMultiply(double factor, SimulationEngine::RiskFactor risk = SimulationEngine::volatility) = 0;
推荐阅读
- vb.net - 如何遍历文件并跳过我无权访问的文件
- python - 根据另一列提取列值,读取多个文件
- c# - 雪花中的查询超时问题
- android - Air-Adb: Error "Cannot run program "bash.exe": CreateProcess error=2, The system cannot find the file specified)
- python - 通过单击按钮更改另一个页面中的标签
- python - Python custom exception not giving message in proper syntax
- c# - Adding a ListView on top of MapView in Xamarin Android using C# (Not Xml)
- java - 字符串中的日期到日期中的日期转换
- apache-zookeeper - zookeeper 命令行界面详细文档在哪里?
- xamarin.forms - xamarin.forms 的弹出 Nuget