내 앞의 질문 C++: Pointer to composite class data member에 추가 :포인터 - 제 2 부
설명 내 요구를 가지고하지 않는죄송합니다. 설명하기에 조금 복잡해 보입니다. 그러나 질문에 따라 아래에서 내 문제에 대한 간략한 설명을 찾아보십시오.
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"));
}