评估字符串到类变量

时间:2013-05-31 18:32:46

标签: c++ string class

我需要评估一个字符串,以便为类变量赋值:

班级:

class DATACLASS {
public:
    double variable1, variable2, variable3;
};

void init():

void init() 
{
    DATACLASS *d = new DATACLASS;
    std::string ssList[3] = {"variable1", 
                             "variable2", 
                             "variable3"};                        
    for(unsigned i = 0; i < 3; ++i)
    {
      std::stringstream ss;
      ss << ssList[i];
      //ss.str().c_str() correspond to "variable1", "variable2", "variable3"
      mxArray *array_ptr = mexGetVariable("base", ss.str().c_str());
      double pr = (double)mxGetPr(array_ptr)[0];
      // How to make the same thing here?
      // I would like to have something that would evaluate
      // data->ssList[i] = pr;
      // or more precisely      
      // data->variable1 = pr;
      // but from the ss string like below (but this doesn't work)
      data->ss.str().c_str() = pr;
    }

尝试这样做时会出现这种错误:

error C2039: 'ss' : is not a member of 'DATACLASS'

3 个答案:

答案 0 :(得分:0)

这不是有效的C ++。编译器认为您尝试执行的操作是访问名为DATACLASS的{​​{1}}实例的成员,并在其上调用一些方法。

您尝试做的事情可以在反射中完成,而C ++不支持。您可以使用模板使用某种形式的伪反射模型来对其进行半拍。

答案 1 :(得分:0)

如果没有大量的努力,你最合理的就是如下。你可以使用宏,函数,容器,模板,指针/引用等抽象出一些东西,但这是基本的要点。除非你有令人信服的理由,否则我不建议这样做,并把时间花在它上面。你的最终目标是什么?

class DATACLASS {
public:
    double variable1, variable2, variable3;
};

void init() 
{
    DATACLASS *d = new DATACLASS;
    std::string ssList[3] = {"variable1", 
                             "variable2", 
                             "variable3"};                        
    for(unsigned i = 0; i < 3; ++i)
    {
      std::stringstream ss;
      ss << ssList[i];
      //ss.str().c_str() correspond to "variable1", "variable2", "variable3"
      mxArray *array_ptr = mexGetVariable("base", ss.str().c_str());
      double pr = (double)mxGetPr(array_ptr)[0];
      if(ss.str() == "variable1")
        data->variable1 = pr;
      else if(ss.str() == "variable2")
        data->variable2 = pr;
      else if(ss.str() == "variable3")
        data->variable3 = pr;
    }
}

答案 2 :(得分:0)

你只读双打吗?您可以使用指向数据成员的指针。

    std::map<std::string, double DATACLASS::*> aMembers;
    aMembers["variable1"] = &DATACLASS::variable1;
    aMembers["variable2"] = &DATACLASS::variable2;
    aMembers["variable3"] = &DATACLASS::variable3;

    DATACLASS dc;
    std::string sData = "variable1";
    dc.*aMembers[sData] = 10;

在完整的解决方案中,您当然必须首先检查aMembers [sData]是否存在。如果需要支持多种数据类型,则需要使用模板并编写一些支持类。不过,这应该是可行的。