Russian Qt Forum
Ноябрь 25, 2024, 02:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: Класс настроек  (Прочитано 21395 раз)
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #45 : Сентябрь 17, 2014, 17:25 »

Цитировать
А если в какой-то момент я захочу заменить instance, а потом вернуть старый ? (типа push/pop)
Или я чего то не понимаю, или вы слишком много требуете от простого синглтона..
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Bepec
Гость
« Ответ #46 : Сентябрь 17, 2014, 17:53 »

Это же Igors.
У него сначала велосипед едет на треугольных колёсах, спрямляем - поехал быстрее.
У велосипеда оказывается были лопасти из картона и он должен был летать, заменили картон на пластик - полетели меееедленно.
Оказывается всё это происходит в коронной области солнца и велосипед должен быть герметичен - со стонами мастерим систему охлаждения, работающую на научных парадоксах и герметизируем с помощью строительной пены.
Ан нет, мы неправы. Потому что забыли систему защиты от злобных пришельцев на трёхколёсных велосипедах Веселый
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #47 : Сентябрь 17, 2014, 18:22 »

Я даже знаю из какой (глупейшей) статьи Вы это почерпнули Улыбающийся Не верьте всему прочитанному

То есть вы утверждаете, что если один синглтон обращаются конструктора к другому, то проблем не будет? :facepalm:
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #48 : Сентябрь 18, 2014, 09:16 »

То есть вы утверждаете, что если один синглтон обращаются конструктора к другому, то проблем не будет? :facepalm:
Пример

Код
C++ (Qt)
// глобальные переменные
QList <int> theGlobalList;
MyClass theGlobalClass(theGlobalList);
const MyClass2 theGlobalClass2(theGlobalClass);
 
Какие здесь проблемы с инициализацией? Никаких, любая "нелокальная" (в терминах стандарта) переменная может использовать объявленные ранее. Порядок не определен для переменных объявленных в разных единицах трансляции - ну так об этом здесь речь не идет (см ниже).

Предоставьте мне желательно другой способ безопасного многопоточного вызова любого метода без использования мутекса Веселый
Если Вы хотели показать себя "опытным практиком", то у Вас была прекрасная возможность. Практик не заморачивался бы с никакими блокировками, а написал бы так
Код
C++ (Qt)
MySingle * MySingle::Instance( void )
{
if (!mInstance)
 mInstance = new MySingle;
return mInstance;
}
Да, это "небезопасно", но достаточно вызвать MySingle::Instance один раз (напр на старте) - и проблемы нет. Или обеспечить вызов перед перед запуском использующих его ниток. Затрудняюсь привести пример когда это невозможно. А часто (пусть и не всегда) можно тупо объявить его глобальной переменной которая гарантировано будет инициализироваться только в главной нитке до main. Однако вместо этого Вы несете такую пургу
А если он будет вызываться 60 раз в секунду - тогда голову надо пожмякать тому, кто напишет такую программу.
что даже неудобно слушать  Улыбающийся

Или я чего то не понимаю, или вы слишком много требуете от простого синглтона..
Вы указываете что в новом стандарте проблема инициализации глобальных переменных решена. Это бесспорно, но речь шла о создании синглтона в куче, резоны найдутся. Выходит объявить "безопасную" глобальную переменную могу, а указатель нет. Или как?
« Последнее редактирование: Сентябрь 18, 2014, 09:19 от Igors » Записан
Bepec
Гость
« Ответ #49 : Сентябрь 18, 2014, 09:35 »

Ваш способ не безопасен. С таким же успехом я могу использовать указатель-глобальную переменную. Но синглтон в не знает кто и когда его вызовет, что накладывает ограничение.
Самое простой пример - использование dll с синглтоном. И никто-никогда не узнает до вызова instance - есть ли в приложении синглтон или нет Улыбающийся

Как обычно по сути дела ничего. Уже и приплели "достаточно вызвать 1 раз". Такое чувство не читали тему - на первых страницах приводили вариант вызова из длл.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #50 : Сентябрь 18, 2014, 14:19 »

Цитировать
но речь шла о создании синглтона в куче, резоны найдутся. Выходит объявить "безопасную" глобальную переменную могу, а указатель нет. Или как?
Для указателей можно использовать std::call_once http://en.cppreference.com/w/cpp/thread/call_once

Есть и примеры синглетонов с её использованием..   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #51 : Октябрь 14, 2014, 15:42 »

Собственно в продолжении темы: как обращаться из программы к настройкам? Удобно пользоваться автодополнением, но когда настройки хранятся в виде QMap<QString,QVariant> при обращении к настройками писать строковый ключ неудробно - нужно его помнить и можно ошибиться, автодополнение - структуры городить.
Записан
vizir.vs
Гость
« Ответ #52 : Октябрь 14, 2014, 15:54 »

Не совсем понял. У тебя в программе есть окно, в котором ты начинаешь вводить название параметра и у тебя должны выпадать возможные варианты продолжения?
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #53 : Октябрь 14, 2014, 15:58 »

Не совсем понял. У тебя в программе есть окно, в котором ты начинаешь вводить название параметра и у тебя должны выпадать возможные варианты продолжения?
Я в коде хочу прочитать что то из настроек, если писать строчку то можно ошибиться.
Записан
OKTA
Гость
« Ответ #54 : Октябрь 14, 2014, 16:20 »

enum тебе в помощь.
Записан
Страниц: 1 2 3 [4]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.095 секунд. Запросов: 23.