如何在C ++中创建modelParameters类,该类使我可以多态地分组和访问不同类型的modelParamter

问题描述

我想设计一个 modelParameters 类,该类将包含一组 individualParameters ,它们具有相似的方法,但是输入和返回类型不同。例如。每种参数类型都有一个getValue()方法,但是一个将返回双精度值,而其他参数类型则可能返回int或vector等。

每个individalParameter还将具有一个字符串名,我想使用它来直接从modelParameters对象访问参数值。即我希望使用modelParameters类的代码如下所示:

modelParameters par;

/* Code initialing the set of available parameters */

cout << par["sigma"].getValue() // returns double value parameter
cout << par["k"].getValue()     // returns int value parameter

我尝试过两种方法,一种是使用模板,另一种是使用虚拟派生类,但是我都遇到了类似的问题。 虽然我可以生成各个参数类,但无法弄清楚如何将它们组合到映射或列表中并以多态方式调用方法。

这是我使用模板方法的地方:

class individual_parameter_B
{
public:
    individual_parameter_B() {};
    ~individual_parameter_B() {};

};

template <class T>
class individual_parameter : public individual_parameter_B
{
public:
    individual_parameter(std::string in_name,T in,std::string in_label ) : 
        name(in_name),currentValue(in) 
    {};

    ~individual_parameter()     {}; 
    T getValue()                {return currentValue;};
    void setValue(T)            {currentValue = T;};  
    std::string getName()       {return name;};

private:
    std::string name;
    T currentValue;
};

/ * modelParameter类的原型。尝试在其中创建具有不同参数类型的容器。

std::vector<std::unique_ptr<individual_parameter_B>> par;

par.push_back(std::unique_ptr<individual_parameter_B>(new individual_parameter<double>{ std::string("sigma"),2,1,50,std::string("\sigma(k)") }));
par.push_back(std::unique_ptr<individual_parameter_B>(new individual_parameter<int>{ std::string("b"),std::string("b") }));

par[0]->getValue(); // This doesn't work. 
// Base class doesn't know about the derived methods. 
// Adding virtual functions to base class didn't work because getValue() has different return types but same inputs.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...