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

Код: 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
10.04.2015, 15:38
    #38933174
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн `Curiously recurring template pattern`
petravПочему так происходит догадаться вроде не сложно. Базовый класс инстанцируется до компиляции класса наследника.

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

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

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

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

Спасибо.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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