Класс для хранения данных (аналог TDataSet для С/С++ в Linux)

Модератор: Модераторы разделов

Serik
Сообщения: 149
ОС: SuSE Linux

Класс для хранения данных

Сообщение Serik »

Нужен класс для хранения данных в Linux,
в run-time определять структуру и наполнять данными.
Язык С/С++, подключаюсь к БД PostgreSQL через libPQ.
Спасибо сказали:
sdk
Бывший модератор
Сообщения: 210

Re: Класс для хранения данных

Сообщение sdk »

Какую структуру? Какими данными? Что нужно от класса?
Что такое TDataSet?
Пробовал std::set, std::vector, и иже с ними?

Вообще, побольше подробностей в таких вопросах! :)
Это как если я сейчас открою тему и скажу:
"Здравствуйте! Мне нужен класс Плюшевого Мишки. С отверткой. В лапе. В левой. На C++.
Планирую положить на кровать соседке. Имя знаю. Спасибо!"
:D
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: Класс для хранения данных

Сообщение Alxn1 »

sdk писал(а):
06.07.2006 12:27
Это как если я сейчас открою тему и скажу:
"Здравствуйте! Мне нужен класс Плюшевого Мишки. С отверткой. В лапе. В левой. На C++.
Планирую положить на кровать соседке. Имя знаю. Спасибо!"
:D


Код: Выделить всё

class HandObject
{
    public:
        HandObject()
        {
        };
}

class BearHand
{
    public:

        void putToHand( HandObject &o )
        {
            object = &o;
        };

        BearHand():object(0)
        {
        };

    private:
        HandObject *object;
}

class Screwdriver: public HandObject
{
    public:

        Screwdriver()
        {
        };
}

class TeddyBear
{
    public:

        void putToBad()
                  {
                   }

        TeddyBear()
        {
            leftHand.putToHand( screwdriver );
        };

    private:
        BearHand leftHand, rightHand;
        Screwdriver screwdriver;
}


:D :D :D

PS: Извиняюсь, больше не буду... :D
Спасибо сказали:
Serik
Сообщения: 149
ОС: SuSE Linux

Re: Класс для хранения данных

Сообщение Serik »

Программа обрабатывает таблицы,
столбцы таблицы (в терминологии БД - структура) определяются во время выполнения, т.е. динамически,
это может быть long, double, char и т.д.
строки заполняются тоже в процессе выполнения.
этих таблиц много, и они разные.

и эти таблицы нужно в программе во время выполнения хранить.

т.е. от класса требуются методы
add_column
set_type_column
set_column_name
set_value
get_value
append
first
next
delete

и т.д.

std::vector и т.д. объявляются статически.

в Delphi такой класс называется TDataSet.
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: Класс для хранения данных

Сообщение Alxn1 »

Может, в сторону Qt покопать? Там это всё есть.
Спасибо сказали:
sdk
Бывший модератор
Сообщения: 210

Re: Класс для хранения данных

Сообщение sdk »

Alxn1, супер! Вот это наш подход ;).
А что если я хочу коричневого с синими руками?
И отвертка чтобы крестовой была?
А глаза синими?
А сам медведь - полярным?
Это я демонстрирую что получается, когда задаешь общие вопросы - получаешь общие ответы :).

Ваще, конечно, полярного медведя можно получить отнаследовавшись от твоего. Но у тебя деструкторы не виртуальные, значит не буду :P.
А еще лучше сделать абстрактный класс-интерфейс плюшевого Мишки с чисто виртуальными функциями...
Тэкс. Меня тоже понесло :D.

Serik, Alxn1 прав - посмотри в сторону Qt. Там есть
a) QTable если нужно визуально отображать
B) QVariant - универсальный класс для хранения разных типов

Если тебе не нужна Qt, совсем несложно написать нужный тебе класс (типа QVariant) самому.
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Спасибо сказали:
mrcashe
Сообщения: 18

Re: Класс для хранения данных

Сообщение mrcashe »

Можно покопаться здесь: http://boost.org
Есть класс boost::variant< >. Может быть, неплохим вариантом было бы хранить данные в виде текста, а ввод/вывод через boost::lexical_cast< >.
Спасибо сказали:
Atlant
Сообщения: 9

Re: Класс для хранения данных

Сообщение Atlant »

Если не критичен С++, то пользуйся FreePascal, там это есть
Спасибо сказали:
Serik
Сообщения: 149
ОС: SuSE Linux

Re: Класс для хранения данных

Сообщение Serik »

Atlant писал(а):
11.07.2006 12:31
Если не критичен С++, то пользуйся FreePascal, там это есть


да, жаль что нет freeClarion
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Класс для хранения данных

Сообщение KiWi »

Вообще, если я не глючу, то...

Любой тип можно привести к void *. Для обратного преобразования требуется знать первоначальный тип.
Правда, придётся во всех случаях работать с указателями(даже с int, long, ...).
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: Класс для хранения данных

Сообщение Alxn1 »

IFL писал(а):
11.07.2006 14:31
Вообще, если я не глючу, то...

Любой тип можно привести к void *. Для обратного преобразования требуется знать первоначальный тип.
Правда, придётся во всех случаях работать с указателями(даже с int, long, ...).


Эээ... Думаю, не тип любой можно приводить к void*, а указатель на переменную любого типа. Да и то есть исключения. Например, указатель на функцию-член класса никогда к void* не стоит приводить. Потому, что sizeof( &(SomeClass::doSome) ) > sizeof(void*) вполне может быть :)
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Класс для хранения данных

Сообщение KiWi »

Alxn1 писал(а):
11.07.2006 15:09
IFL писал(а):
11.07.2006 14:31

Вообще, если я не глючу, то...

Любой тип можно привести к void *. Для обратного преобразования требуется знать первоначальный тип.
Правда, придётся во всех случаях работать с указателями(даже с int, long, ...).


Эээ... Думаю, не тип любой можно приводить к void*, а указатель на переменную любого типа. Да и то есть исключения. Например, указатель на функцию-член класса никогда к void* не стоит приводить. Потому, что sizeof( &(SomeClass::doSome) ) > sizeof(void*) вполне может быть :)

Мы тут про столбцы БД говорим, так что там вполне ограниченный список ТИПОВ, так что функций членов класса там, увы, быть не может.
Спасибо сказали:
sdk
Бывший модератор
Сообщения: 210

Re: Класс для хранения данных

Сообщение sdk »

А вы думали насчет сопровождения такого магического кода? :)
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Класс для хранения данных

Сообщение ety »

люди, зачем вы ему помогает! это явно его лаба в инсте, а вы ему сейчас ее решите

для автоматического определения достаточно union+token, typeof здесь будет оверкиллом.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
sdk
Бывший модератор
Сообщения: 210

Re: Класс для хранения данных

Сообщение sdk »

Ну вот опять :).
Да мне-то какая разница что у него там и где у него там?

Я могу как-то ответить на вопрос человека - это раз.
Мне это не в лом - это два.
Мне это в кайф - это три.

Вот и все :D.
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Класс для хранения данных

Сообщение oav »

Александреску уже доказал что нельзя написать типобезопасный аналог union на _текущем_ стандартном С++. Зато представил реализацию которая на 99% соотв. стандарту. Ее можно найти у него на сайте вместе со статьей.

зы. для понимания статьи advanced C++ это минимум
Спасибо сказали:
sdk
Бывший модератор
Сообщения: 210

Re: Класс для хранения данных

Сообщение sdk »

Александреску лубит темплэйты :D.
Там, наверное, супер-пупер-шаблон-магия... Угадал? ;)
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Класс для хранения данных

Сообщение oav »

sdk писал(а):
12.07.2006 12:14
Александреску лубит темплэйты :D.
Там, наверное, супер-пупер-шаблон-магия... Угадал? ;)

Гм, Александреску использует темплэйты там где это действительно необходимо, как и все остальные адекватные программисты. А задизайнить написать эффективную и одновременно гибкую библиотеку реально трудная работа для которой нужно обладать обширнишними опытом и знаниями. Тем более С++ имхо еще один из сложнейших языков, вот именно этому дядька Андрей всех и учит :)

Шаблоны почти всегда можно выкинуть заменяя, как правило, полиморфизмом. Только о слове эффективность сразу можно забыть
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Класс для хранения данных

Сообщение KiWi »

ety писал(а):
12.07.2006 03:41
люди, зачем вы ему помогает! это явно его лаба в инсте, а вы ему сейчас ее решите

А вам не пох*й?
Ах да, потом бедные ламеры искать работу мешать будут, да.
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Класс для хранения данных

Сообщение ety »

IFL писал(а):
12.07.2006 14:25
А вам не пох*й?
Ах да, потом бедные ламеры искать работу мешать будут, да.

или потом мне с такими ламерами работать придется, и обьяснять им как данные в mysql запихать и что на паскале взрослые люди не пишут <_<

интересно, им самим не стыдно о подобном спрашивать на каждом форуме? :huh:
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: Класс для хранения данных

Сообщение Alxn1 »

ety писал(а):
13.07.2006 14:34
IFL писал(а):
12.07.2006 14:25
А вам не пох*й?
Ах да, потом бедные ламеры искать работу мешать будут, да.

или потом мне с такими ламерами работать придется, и обьяснять им как данные в mysql запихать и что на паскале взрослые люди не пишут <_<

интересно, им самим не стыдно о подобном спрашивать на каждом форуме? :huh:


Да ладно, все этот этап проходят :) У кого-то он тихий (вопросов не задают, курят доку), а у кого-то прёт наружу. Нужно чуть терпимее к людям относится. :)

PS: А на чём взрослые люди пишут? В том плане, что чем плох паскаль? :-O
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Класс для хранения данных

Сообщение ety »

Alxn1 писал(а):
13.07.2006 14:51
PS: А на чём взрослые люди пишут? В том плане, что чем плох паскаль? :-O

сабжа мало?

а еще программеры на паскале обычно не знают ассемблерных языков.

паскаль убивает моск.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: Класс для хранения данных

Сообщение Alxn1 »

ety писал(а):
13.07.2006 15:26
Alxn1 писал(а):
13.07.2006 14:51
PS: А на чём взрослые люди пишут? В том плане, что чем плох паскаль? :-O

сабжа мало?

а еще программеры на паскале обычно не знают ассемблерных языков.

паскаль убивает моск.


Не, по сабжу понял, что на С/С++. :D

Только не верю, что паскаль моск убивает. Сам на нём иногда пишу - вроде с головой всё в допустимых пределах. :D И, кстати, даже программеры на паскале знают ассемблер, обычно. Взляните, например, на рантайм Delphi - там довольно много этакого :D
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Класс для хранения данных

Сообщение oav »

ety писал(а):
13.07.2006 15:26
Alxn1 писал(а):
13.07.2006 14:51
PS: А на чём взрослые люди пишут? В том плане, что чем плох паскаль? :-O

сабжа мало?

а еще программеры на паскале обычно не знают ассемблерных языков.

паскаль убивает моск.

"моск" убивают пцилоцибиновые грибы, а не языки программирования. Их знание/незнания вообще о программисте ничего не говорит
:ph34r:
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Класс для хранения данных

Сообщение KiWi »

ety писал(а):
13.07.2006 14:34
IFL писал(а):
12.07.2006 14:25
А вам не пох*й?
Ах да, потом бедные ламеры искать работу мешать будут, да.

или потом мне с такими ламерами работать придется, и обьяснять им как данные в mysql запихать и что на паскале взрослые люди не пишут <_<

интересно, им самим не стыдно о подобном спрашивать на каждом форуме? :huh:

1. Работать или не работать с ними -- это уже ВАШИ проблемы и, имея свой достойный уровень, вполне можно с ними не работать... Так что всё в ваших руках.
2. Не надоело, а? По-моему, уже абсолютно все поняли вашу позицию: "Все му**ки кроме я".
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Класс для хранения данных

Сообщение ety »

IFL писал(а):
13.07.2006 20:45
2. Не надоело, а? По-моему, уже абсолютно все поняли вашу позицию: "Все му**ки кроме я".

извините, это еще почему? мне может не нравится паскаль, так-же как и кодерам на паскале может не нравится Си или Баш
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали: