первомайская загадка
От: frogkiller Россия  
Дата: 03.05.08 16:37
Оценка: 28 (1)
Судя по местному поиску не "бойан", да гугл пришлось хорошенько прошерстить, пока поборол. Итак:
template <template <class> class T>
struct Bar {};

template <typename T>
struct Foo : public Bar<Foo>  // OK
{
    Foo() : Bar<Foo> () {}  // Oops
};

Собственно вопрос: как побороть, не нарушив идею?

PS. Подсказка: у ответа есть маленькая legacy-особенность
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: первомайская загадка
От: Vain Россия google.ru
Дата: 03.05.08 17:27
Оценка: 2 (1)
Здравствуйте, frogkiller, Вы писали:

F>
F>template <template <class> class T>
F>struct Bar {};
F>template <typename T>
F>struct Foo : public Bar<Foo>  // OK
F>{
F>    Foo() : Bar<::Foo> () {}  // no Oops
F>};
F>

F>Собственно вопрос: как побороть, не нарушив идею?

F>PS. Подсказка: у ответа есть маленькая legacy-особенность

Отдыхать надо, а не загадки решать в первомайские
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: первомайская загадка
От: Conr Россия  
Дата: 03.05.08 17:32
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Судя по местному поиску не "бойан", да гугл пришлось хорошенько прошерстить, пока поборол. Итак:

F>
F>template <template <class> class T>
F>struct Bar {};

F>template <typename T>
F>struct Foo : public Bar<Foo>  // OK
F>{
F>    Foo() : Bar<Foo> () {}  // Oops
F>};
F>

F>Собственно вопрос: как побороть, не нарушив идею?
А зачем вообще выделенное?

Отлично работает вот так:
template <typename T>
struct Foo : public Bar<Foo>
{
    Foo() : Bar ()
    {

    }
};
Re[2]: первомайская загадка
От: frogkiller Россия  
Дата: 03.05.08 17:37
Оценка:
Здравствуйте, Vain, Вы писали:

V>Отдыхать надо, а не загадки решать в первомайские


Ты знал Я надеялся, что народ уже начала подтягиваться домой.

А на грабли с <: ты всё-таки наступил, хоть я и предупреждал
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[2]: первомайская загадка
От: frogkiller Россия  
Дата: 03.05.08 17:57
Оценка:
Здравствуйте, Conr, Вы писали:

F>>Собственно вопрос: как побороть, не нарушив идею?

C>А зачем вообще выделенное?

C>Отлично работает вот так:

C>
C>template <typename T>
C>struct Foo : public Bar<Foo>
C>{
C>    Foo() : Bar ()
C>    {

C>    }
C>};
C>


Чуть-чуть усложним
template <template <class, class> class T, class U>
struct Bar {};

template <class T, class U>
struct Foo : public Bar<Foo, U>
{
    Foo() : Bar() {} // таки Oops, нужен список параметров
};
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[3]: первомайская загадка
От: Vain Россия google.ru
Дата: 03.05.08 20:01
Оценка:
Здравствуйте, frogkiller, Вы писали:

V>>Отдыхать надо, а не загадки решать в первомайские

F>Ты знал
Не знал, но догадался
F>А на грабли с <: ты всё-таки наступил, хоть я и предупреждал
Я не проверял на легаси компиляторах
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: первомайская загадка
От: Аноним  
Дата: 03.05.08 20:10
Оценка:
Здравствуйте, frogkiller, Вы писали:




F>Чуть-чуть усложним

F>
F>template <template <class, class> class T, class U>
F>struct Bar {};

F>template <class T, class U>
F>struct Foo : public Bar<Foo, U>
F>{
F>    Foo() : Bar() {} // таки Oops, нужен список параметров
F>};
F>


Таки не Oops, VC++ 2008 кушает за милую душу
Re[4]: первомайская загадка
От: frogkiller Россия  
Дата: 04.05.08 06:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Таки не Oops, VC++ 2008 кушает за милую душу


Да? Какой он прожорливый, однако. А скорми ему вот такое:

template <template <class, class> class T, class U>
struct Bar {};

template <class T, class U>
struct Foo : public Bar<Foo, U>, public Bar<Foo, T>
{
Foo() : Bar() {} // приятного аппетита
};
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[5]: первомайская загадка
От: Аноним  
Дата: 04.05.08 08:24
Оценка:
Здравствуйте, frogkiller, Вы писали:


F>Да? Какой он прожорливый, однако. А скорми ему вот такое:


F>template <template <class, class> class T, class U>

F>struct Bar {};

F>template <class T, class U>

F>struct Foo : public Bar<Foo, U>, public Bar<Foo, T>
F>{
F> Foo() : Bar() {} // приятного аппетита
F>};


Тогда по мотивам ответа Vain
template <template <class, class> class T, class U>
struct Bar {};

template <class T, class U>
struct Foo : public Bar<Foo, U>, public Bar<Foo, T>
{
typedef Foo _Myt;

Foo() : Bar<::Foo,U>(), Bar<::Foo,T>()
{
} // спасибо, очень вкусно
};
Re: первомайская загадка
От: Lorenzo_LAMAS  
Дата: 04.05.08 08:46
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Судя по местному поиску не "бойан", да гугл пришлось хорошенько прошерстить, пока поборол. Итак:

F>
F>template <template <class> class T>
F>struct Bar {};

F>template <typename T>
F>struct Foo : public Bar<Foo>  // OK
F>{
F>    Foo() : Bar< ::Foo> () {}  // Oops
F>};
F>

F>Собственно вопрос: как побороть, не нарушив идею?

F>PS. Подсказка: у ответа есть маленькая legacy-особенность
Of course, the code must be complete enough to compile and link.
Re[6]: первомайская загадка
От: frogkiller Россия  
Дата: 04.05.08 11:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тогда по мотивам ответа Vain

А>
template <template <class, class> class T, class U>
А>struct Bar {};

А>template <class T, class U>
А>struct Foo : public Bar<Foo, U>, public Bar<Foo, T>
А>{
А>    typedef Foo _Myt;

А>    Foo() : Bar_<:_:Foo,U>(), Bar_<:_:Foo,T>() 
А>    {
А>    } // спасибо, очень вкусно
А>};


И также, как Vain, ты попался на <:. Странно, что это скушал VC2008.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[7]: первомайская загадка
От: Lorenzo_LAMAS  
Дата: 04.05.08 11:32
Оценка: 4 (1)
F>И также, как Vain, ты попался на <:. Странно, что это скушал VC2008.
2005 не кушает, например, такое
int arr<:10:> = <%%>;
Of course, the code must be complete enough to compile and link.
Re[7]: первомайская загадка
От: Аноним  
Дата: 04.05.08 21:00
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


А>>Тогда по мотивам ответа Vain

А>>
template <template <class, class> class T, class U>
А>>struct Bar {};

А>>template <class T, class U>
А>>struct Foo : public Bar<Foo, U>, public Bar<Foo, T>
А>>{
А>>    typedef Foo _Myt;

А>>    Foo() : Bar_<:_:Foo,U>(), Bar_<:_:Foo,T>() 
А>>    {
А>>    } // спасибо, очень вкусно
А>>};


F>И также, как Vain, ты попался на <:. Странно, что это скушал VC2008.


а что есть такой оператор <: ? Что на него как то должен реагировать компилятор?
Re[8]: первомайская загадка
От: Аноним  
Дата: 05.05.08 06:43
Оценка:
Здравствуйте, Аноним, Вы писали:
F>>И также, как Vain, ты попался на <:. Странно, что это скушал VC2008.

А>а что есть такой оператор <: ? Что на него как то должен реагировать компилятор?

<: это alternative token для правой квадратной скобки "[".
Re[9]: первомайская загадка
От: Аноним  
Дата: 05.05.08 08:31
Оценка:
Здравствуйте, Аноним, Вы писали:


А>>а что есть такой оператор <: ? Что на него как то должен реагировать компилятор?

А><: это alternative token для правой квадратной скобки "[".

Где такое написано?
В VC2008 такого точно нет, вообще думаю в любой версии VC такого правила нет.
Re[10]: первомайская загадка
От: frogkiller Россия  
Дата: 05.05.08 10:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:



А>>>а что есть такой оператор <: ? Что на него как то должен реагировать компилятор?

А>><: это alternative token для правой квадратной скобки "[".

А>Где такое написано?

А>В VC2008 такого точно нет, вообще думаю в любой версии VC такого правила нет.

Подробно и на русском.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[11]: первомайская загадка
От: Аноним  
Дата: 05.05.08 11:00
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, Аноним, Вы писали:



А>>>>а что есть такой оператор <: ? Что на него как то должен реагировать компилятор?

А>>><: это alternative token для правой квадратной скобки "[".

А>>Где такое написано?

А>>В VC2008 такого точно нет, вообще думаю в любой версии VC такого правила нет.

F>Подробно и на русском.

Ну значит можно констатировать, что VC вообще о диграфах не знает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.