除了上一个问题C++: Pointer to composite class data member:
很抱歉没有描述我的需求。在我看来,解释起来有点复杂。但是,如有要求,请在下面找到我的问题的简要说明。
我想创建一个从XML自动填充的参数类。
为此,我将该参数类的每个数据成员添加到指向与其XML标记名关联的成员的指针向量中。
在XML读取期间,从XML读取所有标记名称,并更新所有参数的值。
我没有找到任何方法来声明一个指向我班级“stParam1.fVal1”成员的成员指针(参见下面评论的行)。
如何声明指向类结构的成员指针?
class XmlReader
{
public :
struct ST_PARAM
{
float XmlReader::*ptrFloat;
string tagName;
};
void addAttribut(float XmlReader::* pfMembre, string& tagName) {
ST_PARAM stParam;
stParam.ptrFloat = pfMembre;
stParam.tagName = tagName;
_tstParams.push_back(stParam);
}
void ReadParameters(string& fileName){/*...*/} // Read Xml File and update all parameters in _tstParams
private:
vector<ST_PARAM> _tstParams;
};
class Param : public XmlReader
{
public:
Param() {
addAttribut((float XmlReader::*)&Param::fVal1, string("XML_TAG_NAME_1")); // OK
addAttribut((float XmlReader::*)&Param::fVal2, string("XML_TAG_NAME_2")); // OK
// addAttribut((float XmlReader::*)&Param::stParam1.fVal1, string("XML_TAG_NAME_3")); // DON'T WORK -> Syntax is invalid
//...
}
// Some more complex parameters types
typedef struct
{
float fVal1;
float fVal2;
}ST_PARAM_1;
//...
// Declaration of several parameters
ST_PARAM_1 stParam1;
F32 fVal1;
F32 fVal2;
//...
};
void test()
{
Param myParam;
myParam.ReadParameters(string("Parameters.xml"));
}
答案 0 :(得分:0)
为什么您需要所有这些XmlReader::
和Param::
内容?
我认为你正在围绕数据成员构建围栏,只是为了跳过它们的乐趣......
保持简单......
class XmlReader
{
public :
struct ST_PARAM
{
float *ptrFloat;
string tagName;
};
void addAttribut(float* pfMembre, string tagName) {
ST_PARAM stParam;
stParam.ptrFloat = pfMembre;
stParam.tagName = tagName;
_tstParams.push_back(stParam);
}
void ReadParameters(string fileName){/*...*/} // Read Xml File and update all parameters in _tstParams
private:
vector<ST_PARAM> _tstParams;
};
class Param : public XmlReader
{
public:
Param() {
addAttribut(&fVal1, "XML_TAG_NAME_1"); // OK
addAttribut(&fVal2, "XML_TAG_NAME_2"); // OK
addAttribut(&stParam1.fVal1, "XML_TAG_NAME_3"); // OK...
//...
}