Russian Qt Forum

Программирование => С/C++ => Тема начата: Eugene Efremov от Апрель 17, 2008, 21:23



Название: Класс, зависящий от самого себя
Отправлено: Eugene Efremov от Апрель 17, 2008, 21:23
Код:
template<class tp, class val_tp = typename tp::val> class foo 
{
// ....
};

class bar : public foo<bar>  // error
{
public:
typedef int val;
// ....
};
Существует ли в принципе возможность разорвать порочный круг такого рода, или это концептуальный баг в языке?

P.S. Предупреждая ответ «ручками прописать аргументы по умолчанию» — еще пример, демонстрирующий, что это не всегда возможно:
Код:
template<class tp, void (tp::*)()> class foo 
{
//...
};

class bar : public foo<bar, &bar::baz> // error
{
public:
void baz();
//...
};


Название: Re: Класс, зависящий от самого себя
Отправлено: Tonal от Апрель 18, 2008, 08:07
Существует ли в принципе возможность разорвать порочный круг такого рода, или это концептуальный баг в языке?
Может баг в голове? :)

P.S. Предупреждая ответ «ручками прописать аргументы по умолчанию» — еще пример, демонстрирующий, что это не всегда возможно:
Ну и как должен будет в этом случае компилятор действовать? :)

P.S. Обход найти обычно можно, только нужен более подробное описание задачи. :-)


Название: Re: Класс, зависящий от самого себя
Отправлено: Electronix от Май 24, 2008, 22:32
По второму юзай boost::function - там все просто или обьект-функтор. Последнее хорошо описано в книге Вандервуда и Джосьютисса - шаблоны С++.