Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сингелтон, сериализация в деструкторе 
V
    Опции темы
cupper
Дата 13.1.2011, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



спасибо за объяснение. Теперь все окончательно понятно. 


PS. текст ошибки читал, и недоумевал как сериалиазция узнала что я юзаю сингелтон )))

Это сообщение отредактировал(а) cupper - 13.1.2011, 20:54
PM MAIL   Вверх
mes
Дата 13.1.2011, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  13.1.2011,  19:51 Найти цитируемый пост)
текст ошибки читал, и недоумевал как сериалиазция узнала что я юзаю сингелтон )))

 smile  smile  


--------------------
PM MAIL WWW   Вверх
cupper
Дата 13.1.2011, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



господя сколько же извращений я нетерпелся пока довел это до рабочего состояния. В итоге имею
Шаблонный класс
Код

template<class T>
    class AutoSave
    {
    public:
        AutoSave(){}

        ~AutoSave()
        {
            T::save();
        }
    };

Для его использование необходим класс предоставляющий открытй статический метод save() реализующий  что душе взбредет.
Код

class DatabaseHelper : private boost::noncopyable
    {
    friend class BaseDB;
    friend class boost::serialization::access;
            template<class Archive>
            void serialize(Archive&, const unsigned int);

              static boost::shared_ptr<DatabaseHelper> theSingelton;
        /// Загружаем настройки из внешнего xml файла
        /// если файл отсутствует, или не соответвует стандарту, загружаются настройки по умолчанию
        void load();
    public:
        /// Сохраняем данные во внешний файл, в xml формате
        static void save();
    };
void DatabaseHelper::save()
    {
        try
        {
            std::ofstream ofs(SETTING_FILE_NAME);
            if(ofs.good())
            {
                //std::cout << this->user_ << std::endl;
                boost::archive::xml_oarchive oa(ofs);
                oa << boost::serialization::make_nvp("queryString", *theSingelton);
                ofs.close();
            }
        }
        // если чтото пошло не так, пользователю знать об этом не обязательно
        catch(...)
        {
        }
    }


PM MAIL   Вверх
mes
Дата 13.1.2011, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  13.1.2011,  20:59 Найти цитируемый пост)
Для его использование необходим класс предоставляющий открытй статический метод save() реализующий  что душе взбредет.

Цитата(cupper @  13.1.2011,  20:59 Найти цитируемый пост)
господя сколько же извращений я нетерпелся пока довел это до рабочего состояния. В итоге имею

если уж делаете шаблон, то пусть он принимает функциональный объект, который и будет вызывать в деструкторе.. 
(а может в бусте уже такое и есть..) тогда можно будет прибиндить все что душе угодно smile




--------------------
PM MAIL WWW   Вверх
cupper
Дата 13.1.2011, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата(mes @ 13.1.2011,  22:18)
если уж делаете шаблон, то пусть он принимает функциональный объект, который и будет вызывать в деструкторе.. 

вот про это извращение я и говорил smile

у меня то из класса единственно что можно получить это ссылку на костантный объект (на сингелтон мой). А додумать как ее запихать в shared_ptr и чтоб потом все еще работало... вот это так и не получилось.
PM MAIL   Вверх
mes
Дата 13.1.2011, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  13.1.2011,  21:30 Найти цитируемый пост)
вот про это извращение я и говорил 

и где ж извращение то ?

Цитата(cupper @  13.1.2011,  21:30 Найти цитируемый пост)
у меня то из класса единственно что можно получить это ссылку на костантный объект (на сингелтон мой). А додумать как ее запихать в shared_ptr и чтоб потом все еще работало... вот это так и не получилось. 

 smile

Добавлено через 7 минут и 8 секунд
вот например :
http://liveworkspace.org/code/614303e1aa0d...983dbb2014d7245


--------------------
PM MAIL WWW   Вверх
cupper
Дата 13.1.2011, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



извращение не в идеи, а в процессе ее реализации ))
 
но ятаки навоял код
Код

template<class T>
    class AutoSave
    {
    public:
        AutoSave(boost::shared_ptr<T> object):ptr(object){}

        ~AutoSave()
        {
            if(ptr)
            {
                ptr->save();
            }
        }
    private:
        boost::shared_ptr<T> ptr;
    };

Код

class DatabaseHelper : private boost::noncopyable
    {
    public:
        static const DatabaseHelper& GetHelper();
        static const boost::shared_ptr<const DatabaseHelper> GetHelperPtr();

        /// Загружаем настройки из внешнего xml файла
        /// если файл отсутствует, или не соответвует стандарту, загружаются настройки по умолчанию
        void load();
    public:
        /// Сохраняем данные во внешний файл, в xml формате
        void save() const;
    };

Код

main(){
     AutoSave<const DatabaseHelper> autosave(DatabaseHelper::GetHelperPtr());


PS. а теперь посмотрб чего предложили вы, и вероятно ужаснусь от того сколько я всего сделал лишнего ))
PPS. хмм.... мой мозг наверно сегодня уже совсем не варит, ибо я понимаю что за в примере, но уже не понимаю как его связать со своей задачей.

Псукай в итоге мой код уже даже работает, может даже и правильно, но увы, это уже не то чего я хотел изначально :(

Вам mes большое спасибо за разъяснение основной ошибки. Яб сам до этого долго еще не додумался бы.

Это сообщение отредактировал(а) cupper - 13.1.2011, 23:30
PM MAIL   Вверх
mes
Дата 14.1.2011, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  13.1.2011,  22:22 Найти цитируемый пост)
, ибо я понимаю что за в примере, но уже не понимаю как его связать со своей задачей.

а может просто BD не соответствует требованиям ? поэтому и возникают вопросы.. хотя это уже другая тема..



--------------------
PM MAIL WWW   Вверх
cupper
Дата 14.1.2011, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата(mes @ 14.1.2011,  00:00)
Цитата(cupper @  13.1.2011,  22:22 Найти цитируемый пост)
, ибо я понимаю что за в примере, но уже не понимаю как его связать со своей задачей.

а может просто BD не соответствует требованиям ? поэтому и возникают вопросы.. хотя это уже другая тема..

что за БД ? каким требованиям ?

DatabaseHelper содаржит параметры для подключения, адрес, логин, пассовр, название БД, одним сломов настройки, я как раз и хотел иметь возможность харнить эти настройки вне программы smile 
PM MAIL   Вверх
mes
Дата 14.1.2011, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  13.1.2011,  23:32 Найти цитируемый пост)
DatabaseHelper содаржит параметры для подключения, адрес, логин, пассовр, название БД, одним сломов настройки, я как раз и хотел иметь возможность харнить эти настройки вне программы 

но вот тогда зачем его делать синглетоном ?!  smile  smile 


--------------------
PM MAIL WWW   Вверх
cupper
Дата 14.1.2011, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



в моем конкретном случае, БД одна и настройки подключения к ней тоже только одни. Вот и решил опробовать паттерн. С лихвой закруткой в виде автосохранения.
PM MAIL   Вверх
mes
Дата 14.1.2011, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  14.1.2011,  09:51 Найти цитируемый пост)
 БД одна и настройки подключения к ней тоже только одни

это еще не основание для применения паттерна синглетон.. 



--------------------
PM MAIL WWW   Вверх
cupper
Дата 14.1.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата

решил опробовать паттерн

а это ?
PM MAIL   Вверх
mes
Дата 14.1.2011, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  14.1.2011,  15:49 Найти цитируемый пост)
а это ? 

это сойдет  smile  тем более что результативно.. сразу же нарвались на одно из больных мест этого паттерна  smile 



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1016 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.