问题描述
我想设计一个 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 (将#修改为@)