C++ (Qt)struct Cell{ union { uint32 u; int32 i; float f; char* s; }};vector<vector<Cell>> dataTable;
C++ (Qt) vector<string> strings("123", "456", "789"); vector<Cell> v = dataTable.at(0);v[2].s = (char*)strings.at(0).c_str();// Теперь если смотреть в отладке в v[2].s содержится "123"
C++ (Qt)v[4].s = (char*)strings.at(1).c_str();// Смотрим в отладке - видим что v[2].s теперь стало "456", а указатели абсолютно одинаковые.
C++ (Qt)vector<string> strings("123", "456", "789");
C++ (Qt)const char * theStrings[] = { "123", "456", "789" };
C++ (Qt)char* charFromQString(QString &str){ char *tmp = new char[str.length()+1]; strncpy(tmp, str.toLocal8Bit(), str.length()); tmp[str.length()] = 0; return tmp;} v[2].s = charFromQString(strings.at(0));
C++ (Qt)char* charFromString(string &str){ char *tmp = new char[str.length()+1]; strncpy(tmp, str.c_str(), str.length()); tmp[str.length()] = 0; return tmp;}
C++ (Qt)template<typename T>T* File::getRecord(uint32 id) const{ vector<vector<Cell>>::pointer v = getRecord(id); for (vector<uint32>::iterator itr = m_stringFields.begin(); itr != m_stringFields.end(); ++itr) { Cell* cell = &v->at(*itr); const char* str = m_stringsBlock.at(cell->u).c_str(); cell->s = str; } return (T*)v->data();}