Паттерн `Curiously recurring template pattern`

petrav
Дата: 10.04.2015 15:21:23
Не компилируется. Скажите, плиз, я что-то не правильно делаю или я многого хочу?

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 };
};

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

С трудом себе представляю зачем такой паттерн тогда нужен.
MasterZiv
Дата: 10.04.2015 15:38:09
petrav
Почему так происходит догадаться вроде не сложно. Базовый класс инстанцируется до компиляции класса наследника.


Это не совсем так. Или совсем не так.
petrav
Дата: 10.04.2015 15:55:00
MasterZiv,

А поподробнее, пожалуйста?
Anatoly Moskovsky
Дата: 10.04.2015 16:01:24
MasterZiv
Дата: 10.04.2015 16:13:01
petrav
MasterZiv,

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


Базовый класс инстанцируется во время компиляции класса наследника.
petrav
Дата: 10.04.2015 16:59:04
Anatoly Moskovsky,

Спасибо.

Наверное, по вашей ссылке, type traits от класса Derived тут будет лучшим выбором.
mayton
Дата: 10.04.2015 18:49:24
petrav
Почему так происходит догадаться вроде не сложно. Базовый класс инстанцируется до компиляции класса наследника. Но мне почему-то казалось, что компилироваться должно. :)

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


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

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

Не так ли?
petrav
Дата: 10.04.2015 19:36:02
mayton
Мы поднатореем в анализе - но какой будет в этом толк? Ведь платят разработчику 99% за синтез
новых решений а не за анализ шумящего кода.

Не так ли?

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

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

PS: Статью по линку не читал. Там что-то про авто генерацию юнит-тестов? Кстати, где-то слышал что Google Chrome тестируется на огромном кластере компов подачей на вход случайных данных.
Anatoly Moskovsky
Дата: 10.04.2015 19:38:47
petrav
Кстати, где-то слышал что Google Chrome тестируется на огромном кластере компов подачей на вход случайных данных.

Поэтому все баги проявляются на неслучайных данных
mayton
Дата: 10.04.2015 19:40:44
petrav
Если Вы намекаете на мою попытку строить "обобщенную теорию всего" и, вообще, нужно быть попроще. То, мне кажется, я задал очень простой и полезный (с точки зрения практики) вопрос. Мне было даже стыдно. :)

А в чем была для вас простота и полезность приводимого исходника?