Класс для хранения данных (аналог TDataSet для С/С++ в Linux)
Модератор: Модераторы разделов
-
Serik
- Сообщения: 149
- ОС: SuSE Linux
Класс для хранения данных
Нужен класс для хранения данных в Linux,
в run-time определять структуру и наполнять данными.
Язык С/С++, подключаюсь к БД PostgreSQL через libPQ.
в run-time определять структуру и наполнять данными.
Язык С/С++, подключаюсь к БД PostgreSQL через libPQ.
-
sdk
- Бывший модератор
- Сообщения: 210
Re: Класс для хранения данных
Какую структуру? Какими данными? Что нужно от класса?
Что такое TDataSet?
Пробовал std::set, std::vector, и иже с ними?
Вообще, побольше подробностей в таких вопросах!
Это как если я сейчас открою тему и скажу:
"Здравствуйте! Мне нужен класс Плюшевого Мишки. С отверткой. В лапе. В левой. На C++.
Планирую положить на кровать соседке. Имя знаю. Спасибо!"

Что такое TDataSet?
Пробовал std::set, std::vector, и иже с ними?
Вообще, побольше подробностей в таких вопросах!
Это как если я сейчас открою тему и скажу:
"Здравствуйте! Мне нужен класс Плюшевого Мишки. С отверткой. В лапе. В левой. На C++.
Планирую положить на кровать соседке. Имя знаю. Спасибо!"
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
-
Alxn1
- Сообщения: 402
- Статус: Красноглазик со стажем
- ОС: Mavericks
Re: Класс для хранения данных
Код: Выделить всё
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;
}PS: Извиняюсь, больше не буду...
-
Serik
- Сообщения: 149
- ОС: SuSE Linux
Re: Класс для хранения данных
Программа обрабатывает таблицы,
столбцы таблицы (в терминологии БД - структура) определяются во время выполнения, т.е. динамически,
это может быть long, double, char и т.д.
строки заполняются тоже в процессе выполнения.
этих таблиц много, и они разные.
и эти таблицы нужно в программе во время выполнения хранить.
т.е. от класса требуются методы
add_column
set_type_column
set_column_name
set_value
get_value
append
first
next
delete
и т.д.
std::vector и т.д. объявляются статически.
в Delphi такой класс называется TDataSet.
столбцы таблицы (в терминологии БД - структура) определяются во время выполнения, т.е. динамически,
это может быть 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: Класс для хранения данных
Может, в сторону Qt покопать? Там это всё есть.
-
sdk
- Бывший модератор
- Сообщения: 210
Re: Класс для хранения данных
Alxn1, супер! Вот это наш подход
.
А что если я хочу коричневого с синими руками?
И отвертка чтобы крестовой была?
А глаза синими?
А сам медведь - полярным?
Это я демонстрирую что получается, когда задаешь общие вопросы - получаешь общие ответы
.
Ваще, конечно, полярного медведя можно получить отнаследовавшись от твоего. Но у тебя деструкторы не виртуальные, значит не буду :P.
А еще лучше сделать абстрактный класс-интерфейс плюшевого Мишки с чисто виртуальными функциями...
Тэкс. Меня тоже понесло
.
Serik, Alxn1 прав - посмотри в сторону Qt. Там есть
a) QTable если нужно визуально отображать
B) QVariant - универсальный класс для хранения разных типов
Если тебе не нужна Qt, совсем несложно написать нужный тебе класс (типа QVariant) самому.
А что если я хочу коричневого с синими руками?
И отвертка чтобы крестовой была?
А глаза синими?
А сам медведь - полярным?
Это я демонстрирую что получается, когда задаешь общие вопросы - получаешь общие ответы
Ваще, конечно, полярного медведя можно получить отнаследовавшись от твоего. Но у тебя деструкторы не виртуальные, значит не буду :P.
А еще лучше сделать абстрактный класс-интерфейс плюшевого Мишки с чисто виртуальными функциями...
Тэкс. Меня тоже понесло
Serik, Alxn1 прав - посмотри в сторону Qt. Там есть
a) QTable если нужно визуально отображать
B) QVariant - универсальный класс для хранения разных типов
Если тебе не нужна Qt, совсем несложно написать нужный тебе класс (типа QVariant) самому.
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
-
mrcashe
- Сообщения: 18
Re: Класс для хранения данных
Можно покопаться здесь: http://boost.org
Есть класс boost::variant< >. Может быть, неплохим вариантом было бы хранить данные в виде текста, а ввод/вывод через boost::lexical_cast< >.
Есть класс boost::variant< >. Может быть, неплохим вариантом было бы хранить данные в виде текста, а ввод/вывод через boost::lexical_cast< >.
-
Atlant
- Сообщения: 9
Re: Класс для хранения данных
Если не критичен С++, то пользуйся FreePascal, там это есть
-
Serik
- Сообщения: 149
- ОС: SuSE Linux
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Класс для хранения данных
Вообще, если я не глючу, то...
Любой тип можно привести к void *. Для обратного преобразования требуется знать первоначальный тип.
Правда, придётся во всех случаях работать с указателями(даже с int, long, ...).
Любой тип можно привести к void *. Для обратного преобразования требуется знать первоначальный тип.
Правда, придётся во всех случаях работать с указателями(даже с int, long, ...).
-
Alxn1
- Сообщения: 402
- Статус: Красноглазик со стажем
- ОС: Mavericks
Re: Класс для хранения данных
Эээ... Думаю, не тип любой можно приводить к void*, а указатель на переменную любого типа. Да и то есть исключения. Например, указатель на функцию-член класса никогда к void* не стоит приводить. Потому, что sizeof( &(SomeClass::doSome) ) > sizeof(void*) вполне может быть
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Класс для хранения данных
Alxn1 писал(а): ↑11.07.2006 15:09
Эээ... Думаю, не тип любой можно приводить к void*, а указатель на переменную любого типа. Да и то есть исключения. Например, указатель на функцию-член класса никогда к void* не стоит приводить. Потому, что sizeof( &(SomeClass::doSome) ) > sizeof(void*) вполне может быть
Мы тут про столбцы БД говорим, так что там вполне ограниченный список ТИПОВ, так что функций членов класса там, увы, быть не может.
-
sdk
- Бывший модератор
- Сообщения: 210
Re: Класс для хранения данных
А вы думали насчет сопровождения такого магического кода? 
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
-
ety
- Сообщения: 358
- ОС: Linux
Re: Класс для хранения данных
люди, зачем вы ему помогает! это явно его лаба в инсте, а вы ему сейчас ее решите
для автоматического определения достаточно union+token, typeof здесь будет оверкиллом.
для автоматического определения достаточно union+token, typeof здесь будет оверкиллом.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-
sdk
- Бывший модератор
- Сообщения: 210
Re: Класс для хранения данных
Ну вот опять
.
Да мне-то какая разница что у него там и где у него там?
Я могу как-то ответить на вопрос человека - это раз.
Мне это не в лом - это два.
Мне это в кайф - это три.
Вот и все
.
Да мне-то какая разница что у него там и где у него там?
Я могу как-то ответить на вопрос человека - это раз.
Мне это не в лом - это два.
Мне это в кайф - это три.
Вот и все
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
-
oav
- Бывший модератор
- Сообщения: 296
Re: Класс для хранения данных
Александреску уже доказал что нельзя написать типобезопасный аналог union на _текущем_ стандартном С++. Зато представил реализацию которая на 99% соотв. стандарту. Ее можно найти у него на сайте вместе со статьей.
зы. для понимания статьи advanced C++ это минимум
зы. для понимания статьи advanced C++ это минимум
-
sdk
- Бывший модератор
- Сообщения: 210
Re: Класс для хранения данных
Александреску лубит темплэйты
.
Там, наверное, супер-пупер-шаблон-магия... Угадал?
Там, наверное, супер-пупер-шаблон-магия... Угадал?
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
-
oav
- Бывший модератор
- Сообщения: 296
Re: Класс для хранения данных
Гм, Александреску использует темплэйты там где это действительно необходимо, как и все остальные адекватные программисты. А задизайнить написать эффективную и одновременно гибкую библиотеку реально трудная работа для которой нужно обладать обширнишними опытом и знаниями. Тем более С++ имхо еще один из сложнейших языков, вот именно этому дядька Андрей всех и учит
Шаблоны почти всегда можно выкинуть заменяя, как правило, полиморфизмом. Только о слове эффективность сразу можно забыть
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
-
ety
- Сообщения: 358
- ОС: Linux
Re: Класс для хранения данных
или потом мне с такими ламерами работать придется, и обьяснять им как данные в mysql запихать и что на паскале взрослые люди не пишут <_<
интересно, им самим не стыдно о подобном спрашивать на каждом форуме?
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-
Alxn1
- Сообщения: 402
- Статус: Красноглазик со стажем
- ОС: Mavericks
Re: Класс для хранения данных
Да ладно, все этот этап проходят
PS: А на чём взрослые люди пишут? В том плане, что чем плох паскаль? :-O
-
ety
- Сообщения: 358
- ОС: Linux
Re: Класс для хранения данных
сабжа мало?
а еще программеры на паскале обычно не знают ассемблерных языков.
паскаль убивает моск.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-
Alxn1
- Сообщения: 402
- Статус: Красноглазик со стажем
- ОС: Mavericks
Re: Класс для хранения данных
Не, по сабжу понял, что на С/С++.
Только не верю, что паскаль моск убивает. Сам на нём иногда пишу - вроде с головой всё в допустимых пределах.
-
oav
- Бывший модератор
- Сообщения: 296
Re: Класс для хранения данных
"моск" убивают пцилоцибиновые грибы, а не языки программирования. Их знание/незнания вообще о программисте ничего не говорит
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Класс для хранения данных
1. Работать или не работать с ними -- это уже ВАШИ проблемы и, имея свой достойный уровень, вполне можно с ними не работать... Так что всё в ваших руках.
2. Не надоело, а? По-моему, уже абсолютно все поняли вашу позицию: "Все му**ки кроме я".
-
ety
- Сообщения: 358
- ОС: Linux
Re: Класс для хранения данных
извините, это еще почему? мне может не нравится паскаль, так-же как и кодерам на паскале может не нравится Си или Баш
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.