-2

私の以前の質問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"));
}
4

1 に答える 1