如何解决如何在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 举报,一经查实,本站将立刻删除。