我正在尝试从数据库结果创建结构。有什么简单的方法可以做到这一点? 我希望得到这样的东西:(这是一个不起作用的小例子。我把它放在一切都清楚了)
struct ROWSTRUCTURE
{
int ID;
std::string test;
};
enum ROWSTRUCTURE_FIELD_ENUM_end
{
ROWSTRUCTURE_FIELD_ENUM_ID,
ROWSTRUCTURE_FIELD_ENUM_test,
ROWSTRUCTURE_FIELD_ENUM_end
};
list<ROWSTRUCTURE> getData()
{
MYSQL_ROW row;
MYSQL_RES *res_set;
mysql_query(connect,"SELECT * FROM `example`;");
res_set = mysql_store_result(connect);
while ((row = mysql_fetch_row(res_set)) != NULL)
{
ROWSTRUCTURE StructToAdd;
for( int i = 0; i < ROWSTRUCTURE_FIELD_ENUM_end; i++)
StructToAdd[i] = row[i]; //ERROR
}
delete res_set;
}
我怎样才能以正确的方式做到这一点?
答案 0 :(得分:0)
您正在寻找的是一种称为“反射”的东西,其中变量,成员字段等的名称可用于指代实际的变量/字段或其他。 C ++不支持这一点。你需要以其他方式解决这个问题......一个看似合理的解决方案是:
StructToAdd.ID = strtol(row[ROWSTRUCTURE_FIELD_ENUM_ID]);
StructToAdd.test = row[ROWSTRUCTURE_FIELD_ENUM_test];
或者,正如评论所暗示的那样:
struct ROWSTRUCTURE
{
int ID;
std::string test;
ROWSTRUCTURE operator=(const MYSQL_ROW &row)
{
ID = strtol(row[ROWSTRUCTURE_FIELD_ENUM_ID]);
test = row[ROWSTRUCTURE_FIELD_ENUM_test];
return *this;
}
};
然后在“main”函数中:
StructToAdd = row;