powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Паттерн `Curiously recurring template pattern`
22 сообщений из 22, страница 1 из 1
Паттерн `Curiously recurring template pattern`
    #38933155
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не компилируется. Скажите, плиз, я что-то не правильно делаю или я многого хочу?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
template <class T>
struct Base
{
    /*
        Везде ошибка: error C2039: 'Values' : is not a member of 'Derived'.
    */
    typedef typename T::Values NewValues;
    typename T::Values value;
    void Foo( typename T::Values value ){}
};

struct Derived:
    Base<Derived>
{
    enum Values { One };
};


Почему так происходит догадаться вроде не сложно. Базовый класс инстанцируется до компиляции класса наследника. Но мне почему-то казалось, что компилироваться должно. :)

С трудом себе представляю зачем такой паттерн тогда нужен.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933174
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravПочему так происходит догадаться вроде не сложно. Базовый класс инстанцируется до компиляции класса наследника.

Это не совсем так. Или совсем не так.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933194
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

А поподробнее, пожалуйста?
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933199
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933210
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravMasterZiv,

А поподробнее, пожалуйста?

Базовый класс инстанцируется во время компиляции класса наследника.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933267
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Спасибо.

Наверное, по вашей ссылке, type traits от класса Derived тут будет лучшим выбором.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933380
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravПочему так происходит догадаться вроде не сложно. Базовый класс инстанцируется до компиляции класса наследника. Но мне почему-то казалось, что компилироваться должно. :)

С трудом себе представляю зачем такой паттерн тогда нужен.

Я вот сегодня читал на хабре про PODAM
и представил себе что такая система будет генерировать случайные С++ сорсы полностью в соответствии
с правилами Language да + еще и добавлять туда немного наследования с мета-программингом. Эта система
в считанные секунды нагенерит нам OVER 9000 топиков в С++ и покроет нам весь свободный досуг
разбором "странного кода" аж до 2050 года.

Мы поднатореем в анализе - но какой будет в этом толк? Ведь платят разработчику 99% за синтез
новых решений а не за анализ шумящего кода.

Не так ли?
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933417
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМы поднатореем в анализе - но какой будет в этом толк? Ведь платят разработчику 99% за синтез
новых решений а не за анализ шумящего кода.

Не так ли?
Это приглашение к пятнично-философским рассуждениям? Или я опять ничего не понял?

Если Вы намекаете на мою попытку строить "обобщенную теорию всего" и, вообще, нужно быть попроще. То, мне кажется, я задал очень простой и полезный (с точки зрения практики) вопрос. Мне было даже стыдно. :)

PS: Статью по линку не читал. Там что-то про авто генерацию юнит-тестов? Кстати, где-то слышал что Google Chrome тестируется на огромном кластере компов подачей на вход случайных данных.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933420
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravКстати, где-то слышал что Google Chrome тестируется на огромном кластере компов подачей на вход случайных данных.
Поэтому все баги проявляются на неслучайных данных
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЕсли Вы намекаете на мою попытку строить "обобщенную теорию всего" и, вообще, нужно быть попроще. То, мне кажется, я задал очень простой и полезный (с точки зрения практики) вопрос. Мне было даже стыдно. :)

А в чем была для вас простота и полезность приводимого исходника?
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933426
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА в чем была для вас простота и полезность приводимого исходника?
Простота в том, что это действительно просто. Ну, по сравнению с Александреску. :)

Полезность в текущей задаче. Да, можно было бы, вместо пропихивания в базовый класс перечисления (enum) из класса наследника... Можно было в базовом классе просто использовать int. Но это не красиво и нарушает безопасность типов. А новомодный enum class не приводится к int по умолчанию. И вообще, по стандарту enum это совсем не int.

А вообще, это часть разработки. Множество классов реализующих конечные автоматы. Enum - это состояние КА. Нужно разработать базовый класс для протоколирования переходов между состояниями.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933430
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskypetravКстати, где-то слышал что Google Chrome тестируется на огромном кластере компов подачей на вход случайных данных.
Поэтому все баги проявляются на неслучайных данных
Не могу рассуждать про оправданность такого тестирование Google Chrome. А вот по тестированию Internet Explorer читал, что тоже огромный кластер тестирует IE эмулируя разные условия работы сети (медленно, быстро, со сбоями etc).

Меня тут удивляет, что Firefox хороший браузер, но не думаю что в его автоматическое тестирование вкладываются миллионы (десятки, сотни?) миллионов долларов в год.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933433
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravmaytonА в чем была для вас простота и полезность приводимого исходника?
Простота в том, что это действительно просто. Ну, по сравнению с Александреску. :)

Полезность в текущей задаче. Да, можно было бы, вместо пропихивания в базовый класс перечисления (enum) из класса наследника... Можно было в базовом классе просто использовать int. Но это не красиво и нарушает безопасность типов. А новомодный enum class не приводится к int по умолчанию. И вообще, по стандарту enum это совсем не int.

А вообще, это часть разработки. Множество классов реализующих конечные автоматы. Enum - это состояние КА. Нужно разработать базовый класс для протоколирования переходов между состояниями.
Тоесть простой рефакторинг enum->int убирает из твоего кода аж целую сущность?
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933437
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТоесть простой рефакторинг enum->int убирает из твоего кода аж целую сущность?
Не совсем верно, но ответ: этот рефакторинг убрал бы обсуждаемую проблему.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933440
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravmaytonТоесть простой рефакторинг enum->int убирает из твоего кода аж целую сущность?
Не совсем верно, но ответ: этот рефакторинг убрал бы обсуждаемую проблему.
Так убирай. Следуй принципу KISS.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933456
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Я много читал ваших постов. Не только в этой ветке. Мне кажется, что Вы сами не следуете принципу KISS. Просто почему-то, в данной ситуации Вам не нравятся шаблоны C++. :-)
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933470
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я никогда не был против мета-програмирования. Это рабочий паттерн. Но чем
больше аргументов у специалиста в пользу упрощения кода (в частности
чем меньше он вводит сущностей для решения задачи) - тем выше его
seniority level.

Я так думаю.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933481
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ никогда не был против мета-програмирования. Это рабочий паттерн. Но чем
больше аргументов у специалиста в пользу упрощения кода (в частности
чем меньше он вводит сущностей для решения задачи) - тем выше его
seniority level.
Есть другое жизненное наблюдение. Это я не про Вас.

Чем больше у дилетанта аргументов в пользу упрощения кода, тем менее он квалифицирован — даже на решение банальных задач. При этом дилетант упрощением кода маскирует свою безграмотность и полное наплевательство на результаты своего труда. Учиться не желает ничему, да и не может. Но он выставляет всю свою простоту… как свой уровень высокого профессионализма, которому следует подражать молодым разработчикам.

maytonЯ так думаю.
Вы думаете так исключительно со своей позиции, а не с "позиции высоты птичьего полета".
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933488
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини. Я забыл что к каждому своему посту подразумевается ИМХО.

Вобщем KISS IMHO. И не болей.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933491
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ не болей.
Ну раз от Вас пошла такая риторика, то я надеюсь, что не обидел Вас ничем и не провоцировал. Если что — извините.

Закончим разговор.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933584
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без помощи этой идиомы (Curiously recurring template pattern) типобезопасная реализация многих видов смартуказателей и контейнеров (как минимум) была бы невозможной или сложной.
Поэтому затронутая проблема с ограниченностью ее применения вполне важна.
И решаться она конечно же не должна за счет жертвования типобезопасностью. Потому что сама эта идиома вводилась в первую очередь ради этой безопасности.
...
Рейтинг: 0 / 0
Паттерн `Curiously recurring template pattern`
    #38933587
locked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petravmaytonА в чем была для вас простота и полезность приводимого исходника?
Простота в том, что это действительно просто. Ну, по сравнению с Александреску. :)

Полезность в текущей задаче. Да, можно было бы, вместо пропихивания в базовый класс перечисления (enum) из класса наследника... Можно было в базовом классе просто использовать int. Но это не красиво и нарушает безопасность типов. А новомодный enum class не приводится к int по умолчанию. И вообще, по стандарту enum это совсем не int.

А вообще, это часть разработки. Множество классов реализующих конечные автоматы. Enum - это состояние КА. Нужно разработать базовый класс для протоколирования переходов между состояниями.
Коряво. Я бы имплементировал автомат как таблицу. Тогда код - это имплементация абстрактного автомата. И ненужно никаких захардкоденных состояний в енумах. И тем более выноса состояний автомата на мета уровень.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Паттерн `Curiously recurring template pattern`
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]