Может ли кто-нибудь рекомендовать облегченную структуру данных таблиц С++ с открытым исходным кодом, которая имеет доступ к данным, подобный таблице базы данных? (т.е. 2D-массив, но с именованными столбцами - в идеале каждый столбец будет содержать данные одного типа [см. ниже]).
Я быстро просмотрел Google, но не нашел ничего полезного.
Как я вижу, это доступные мне варианты:
- Напиши свой собственный с нуля (не очень хочется изобретать колесо)
- вырвать класс SimpleResult из mySQL ++ и взломать его
- используйте sqlite (не знаю, как это будет с LightWight - так как мне не нужен механизм запросов и все другие вещи)
- Задайте здесь, чтобы узнать, знает ли кто-нибудь о такой библиотеке
Итак, я выбираю самый быстрый маршрут (надеюсь, тот, который также будет самым эффективным использованием моего времени), поскольку все, что рекомендуется здесь, скорее всего, будет рассмотрено экспертами).
Итак, может ли кто-нибудь рекомендовать класс/набор классов С++, который предоставляет интерфейс "таблицы базы данных"?
Основные требования:
- У столбцов есть имена
- Доступ к ячейкам можно получить с помощью индексов строк, столбцов
- Я могу добавить строки и столбцы в таблицу (в идеале, я могу их удалить)
- (Приятно иметь): столбцы могут иметь типы, поэтому они сохраняют стоимость преобразования в/из строк
[EDIT]
Чтобы еще раз продемонстрировать, как я хочу использовать библиотеку, см. псевдо-код ниже, чтобы увидеть простое использование такого класса (простое, то есть теперь итерация строк и столбцов), что было бы действительно круто). На данный момент просто держать вещи простыми:
typedef MemoryTable::ColType ColumnType;
table = new MemoryTable();
// Set up the structure (this can be modified later using removeColumn() etc
table->addColumn(ColumnType::Integer, 'id');
table->addColumn(ColumnType::String, 'name');
table->addColumn(ColumnType::Boolean, 'gender');
table->addColumn(ColumnType::Double, 'weight');
for (size_t i=0; i<10; i++)
{
table->addRow();
numrows = table->getNumRows();
std::cout << "We now have " << numrows << " rows.\n";
// Note can access cells using column name or index
// Also using generic value getter/setter methods. Can throw exception on type mismatch
table->setValue(i, 'id', i*i);
table->setValue(i, 'name', getRandomSimpsonCharacterName());
//just to show use of a getter method
table->setValue(i, 'gender', checkGender(table->getValue(i, 'name')));
table->setValue(i, 3, guessWeight(table->getValue(i, 'name')));
}