Различная библиотека типа данных для C

Есть ли достойная библиотека C с открытым исходным кодом для того, чтобы сохранить и управлять
переменные с динамическим контролем типов (иначе варианты)? Я, прежде всего, интересуюсь атомарными значениями (int8, int16, int32, uint, строки, блобы, и т.д.), в то время как массивы JSON-стиля и объекты, а также пользовательские объекты также были бы хороши. Особо важное дело, где такая библиотека была бы полезна, находится в работе с базами данных SQL.

Самой очевидной функцией такой библиотеки был бы единственный тип для всех поддерживаемых значений, например:

struct Variant {
    enum Type type;
    union {
        int8_t int8_;
        int16_t int16_;
        // ...
    };
};

Другие функции могли бы включать объекты Варианта преобразования в структуры C (использующий обязательную таблицу), преобразовывая значения в строки и интеграцию с существующей библиотекой базы данных, такие как SQLite.

Примечание: Я не полагаю, что это - вопрос, дубликат Какой-либо библиотеки для универсальных типов данных в C?, который относится к "очередям, деревьям, картам, спискам". Что я говорю о внимании больше на создание работы с базами данных SQL, примерно столь же гладкими как работающий с ними на интерпретируемых языках.

7
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

Предлагаю прочитать руководство по коннектору базы данных SQL. Соединитель MySQL предоставляет API для получения типов полей в результате .

Вы можете создать функцию Factory , которая заполняет структуру на основе типа поля. По иронии судьбы, поскольку C не имеет базовых типов, вам придется использовать указатель void * и преобразовать его в известный тип структуры. (Хотя вы пытаетесь избавиться от типа void * .)

0
ответ дан 7 December 2019 в 12:17
поделиться

C - очень сильный типизированный язык, варианты не являются частью его философии. Объединение не может быть решением, потому что вам все равно придется выбирать тип данных, который вы хотите использовать, оно обычно используется для хранения цветовых кодов на int и char[4].

Если посмотреть на интерфейс C-SQLite, то там предусмотрена такая функция :

int sqlite_step(
  sqlite_vm *pVm,          /* The virtual machine to execute */
  int *pN,                 /* OUT: Number of columns in result */
  const char ***pazValue,  /* OUT: Column data */
  const char ***pazColName /* OUT: Column names and datatypes */
);

Типы данных представлены char*, и задача разработчика - придумать, как из них получить типы. Я думаю, что любой вариант типа был бы лучше, но это просто не Си. Си не реализует варианты и не предназначен для этого.

-4
ответ дан 7 December 2019 в 12:17
поделиться

GLib имеет реализацию общих типов значений в форме GValue: http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html

5
ответ дан 7 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: