Слишком много членов данных кажется мне запахом кода. Может быть, вы должны работать над своим дизайном для этого. Кроме того, ваш запрос не использовать «сложные структуры данных» кажется мне немного странным. Во-первых, вектор не так уж и сложен, а во-вторых, вы должны всегда использовать STL-контейнеры, если это уместно. Они быстрые, проверенные и надежные.
Увы, для того, что вы спросили, я думаю, что лучшим способом было бы поместить все Cmd
в отдельный класс, заставить их использовать и хранить (указатель на ) объект в вашем BaseSQLStmts
, то есть:
struct CmdCollection {
struct Cmd {
Cmd(CmdCollection &coll, const char *sqlStmt)
: collec(coll), sqlStmt(sqlStmt), sqlHandle(Database::noHandle)
{};
Database::Handle operator() () {
if (sqlHandle==Database::noHandle) {
sqlHandle = collec.db->prepareSQL(sqlStmt);
}
return sqlHandle;
}
CmdCollection &collec;
const char *sqlStmt;
Database::Handle sqlHandle;
};
Database db;
Cmd cmd1 = Cmd(*this, "STMT1");
Cmd cmd2 = Cmd(*this, "STMT2");
CmdCollection(Database db) : db(db) {}
};
struct BaseSQLStmts {
BaseSQLStmts(Database db) : db(db), col(db) {};
// SQL-Statement to construct with database and SQL.
CmdCollection col;
// And many more (>50) members of type Cmd.
private:
Database db;
};