Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
 Re: Функция инициализации или исключение в конструкторе?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
Чукча ТС не читатель. Он писатель....
и первый раз видит кнопку Настройки - По умолчанию
LOL)))
4 мар 21, 07:22    [22289404]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
mayton
Он спросил. Что предпочтительнее.

Я думаю что оба варианта плохие. Но мне нравится более атомарный вариант класса конфигурации
когда конструктор делает 100% подготовительной работы и не падает.
вот где в этом посту ты говоришь о настройках по умолчанию что он тебя цитирует?
Удивительно как 3 страницы люди ни о чем говорят.
4 мар 21, 07:26    [22289406]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
mayton,
Предложи ему статический метод класса возвращающий экземпляр себя.
Там будет проверки в первых строках и потом конструктор.
Уж эти 3 варианта удовлетворяет любого новичка
- coctructor
- init
- static createInstans
4 мар 21, 07:34    [22289409]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Статический метод? Зачем. Он не добавляет ничего к тому что было уже сказано.
4 мар 21, 13:17    [22289559]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
mayton
Статический метод? Зачем. Он не добавляет ничего к тому что было уже сказано.
а в каком варианте это метод
автор
У нас есть два варианта для инициализации и обработки ошибок:

1) Функция инициализации возвращающая признак ошибки.
2) Или исключение вылетающие из конструктора.

В первом или втором?
Или ТС такой косноязычный?
4 мар 21, 13:45    [22289580]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Я не хочу сильно погружаться в эту тему. По ней мало инфы. Нет даже названия этого класса.
А все теоретики ООП говорят о том что имя - должно быть звучащим. Оно должно значить.
Например "Properties" или "PropertyParser". В зависимости от этого другие ответы по дизайну
класса могут обрести смыл. А там мы пока обсуждаем шкуру медведя которого еще нету.

Для случая с *Parser функция возвращающая опционал или Maybe<> может быть и была-бы полезна.
4 мар 21, 14:07    [22289603]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
mayton,
Ну, если ТС спорит с нужностью default настроек и переменных, то
это вообще за гранью)))))
Удачи аффтару!
4 мар 21, 14:14    [22289615]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
petrav
Member

Откуда:
Сообщений: 2861
mayton
По ней мало инфы. Нет даже названия этого класса.

Я придумал выход из ситуации, который меня устраивает. Дело в том, что класс настроек
у меня болтается не просто так, а управляется повторно-используемым классом синглетона.

template <...>
class Singleton {...};
class Options {...};

const bool IsAllowDefault = false;
Singleton<Options, IsAllowDefault> opt;

opt.init(path);
int v = opt->getMyValue();

Класс Options в конструкторе только заполняет все настройки дефолтными значениями. И
класс Options реализует функцию init(). Но если IsAllowDefault == false в целом синглетон
ведёт себя так, как будто из конструктора Options при ошибке вылетело исключение. А если
IsAllowDefault == true, то синглетон ведёт себя так, как будто была вызвана функция init().

Т.е. двумя вариантами реализации из моего первого поста я управляю настраивая класс
Singleton. И могу легко переключаться между поведениями: 1) исключение из конструктора
2) вызов функции init().

Приятно, то что функция Options::save() вызывается в классе Singleton. Т.е. в классе Options
не нужно следить за тем, а были ли мы успешно загружены, а если были то в деструкторе
Options вызовем save(). И виртуальный метод Options::save() нужно было вызывать именно в
деструкторе клиентского класса Options, этот метод нельзя было вызывать в деструкторе
базового класса OptionsBase, по понятным причинам. Теперь деструктор Options пустой.

И теперь всем жизненным циклом управляет класс Singleton и поведение настраивается
через шаблонные параметры этого класса.
4 мар 21, 17:53    [22289825]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
Ужас.
Синглетон счас наверно только сишники остались используют)
4 мар 21, 18:14    [22289849]     Ответить | Цитировать Сообщить модератору
 Re: Функция инициализации или исключение в конструкторе?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
petrav,
автор
Т.е. двумя вариантами реализации из моего первого поста я управляю настраивая класс
Singleton. И могу легко переключаться между поведениями: 1) исключение из конструктора
2) вызов функции init().

Вообще то это решается не в рантайме и не набегу, а во время написания кода.
4 мар 21, 18:17    [22289854]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / C++ Ответить