将字符串求值为类变量
Evaluate string to class variable
我需要计算一个字符串,这样我就可以给一个类变量赋值:
类: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'
这是无效的c++。编译器认为你要做的是访问DATACLASS
的一个名为ss
的实例的成员,并在其上调用一些方法。
你想做的事情可以在反射中完成,这在c++中是不支持的。您可以通过使用模板使用某种形式的伪反射模型来减半它。
你只读双精度吗?可以使用指向数据成员的指针。
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;
在一个完整的解决方案中,你当然必须首先检查members [sData]是否存在。如果需要支持多种数据类型,则需要使用模板并编写一些支持类。不过,这应该是可行的。
不需要大量努力的最接近的方法是如下所示。您可以使用宏、函数、容器、模板、指针/引用等抽象出一些东西,但这是基本要点。除非你有一个令人信服的理由,否则我不建议你这么做,也不建议你花时间去做。你的最终目标是什么?
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;
}
}
相关文章:
- 查找后更改类变量
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 基于模板的类变量
- 为什么我的子类不继承父类的字符串?
- 分段 访问私有类变量时出错
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 模板类变量作为非模板类的成员
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 类变量无法从类方法访问
- 指针作为类变量 Qt
- 为什么线程对类变量所做的更改没有影响?
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- C++:使用基类中的仅派生类变量
- 将字符串附加到C 中的类变量
- 显示类变量.在 printf 函数中使用字符串作为参数
- 将字符串从托管Listbox拉到char*类型的类变量中
- 将字符串求值为类变量