0

我正在尝试从数据库结果创建结构。有什么简单的方法可以做到这一点?我想得到这样的东西:(这是一个不起作用的小例子。我放这个是为了让一切都清楚)

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;
}

我怎样才能以正确的方式做到这一点?

4

1 回答 1

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;
于 2013-04-17T10:09:10.493 回答