指向复合类数据成员的指针-第2部分
Pointer to composite class data member - Part 2
对于我之前的问题c++:指向复合类数据成员的指针:
很抱歉没有描述我的需求。在我看来,解释起来有点复杂。但是,按照要求,请在下面找到我的问题的简要描述。
我想创建一个从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"));
}
你为什么需要这些XmlReader::
和Param::
的东西呢?
我认为你在你的数据成员周围建立了栅栏,只是为了快乐地跳过它们…
Keep It Simple…
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...
//...
}
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 函数指针类型和值的部分类专用化
- 如何在结构体内部实现指针
- 模板函数转换为结构体内部的函数指针
- 在c++中获取指向复向量实部和虚部的指针
- 从结构体内部调用成员函数指针所指向的函数