подскажите по воподу using в классах
От: Аноним  
Дата: 26.02.07 10:01
Оценка:
не работает такой код:

template <class T>
class mydeque : private std::deque<T>
{
    using std::deque<T>::operator[];
};


а конкретно компилер ругается на отсутствие включаемого члена (оператора индекса).

подскажите плиз в чем проблема
Re: подскажите по воподу using в классах
От: Bell Россия  
Дата: 26.02.07 10:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>не работает такой код:


А>
А>template <class T>
А>class mydeque : private std::deque<T>
А>{
А>    using std::deque<T>::operator[];
А>};
А>


А>а конкретно компилер ругается на отсутствие включаемого члена (оператора индекса).


А>подскажите плиз в чем проблема


VC7.1 и Comeau не испытывают никаких проблем с приведенным примером, так что судя по всему проблема в компиляторе
Если это VC6 то победить можно так:
template <class T>
class mydeque : private std::deque<T>
{
   typedef std::deque<T> Base;
   using Base::operator[];
};


Если нет — то остается только брать в руки бубен...
Любите книгу — источник знаний (с) М.Горький
Re: подскажите по воподу using в классах
От: Greg Zubankov СССР  
Дата: 26.02.07 10:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>подскажите плиз в чем проблема


Какой конкретно компилятор?
У VS2005 и Comeau проблем не возникло.
Re[2]: подскажите по воподу using в классах
От: Аноним  
Дата: 26.02.07 10:23
Оценка:
Здравствуйте, Greg Zubankov, Вы писали:

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

GZ>Какой конкретно компилятор?
GZ>У VS2005 и Comeau проблем не возникло.

bcb6.0 sp4
Re[2]: подскажите по воподу using в классах
От: Аноним  
Дата: 26.02.07 10:28
Оценка:
Здравствуйте, Bell, Вы писали:

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


B>Если это VC6 то победить можно так:

B>
B>template <class T>
B>class mydeque : private std::deque<T>
B>{
B>   typedef std::deque<T> Base;
B>   using Base::operator[];
B>};
B>


B>Если нет — то остается только брать в руки бубен...


bcb 6.0 sp4

те же яйца — member identifier expected ((((((((((
Re: подскажите по воподу using в классах
От: dr.Chaos Россия Украшения HandMade
Дата: 26.02.07 10:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>не работает такой код:


А>
А>template <class T>
А>class mydeque : private std::deque<T>
А>{
    public:
А>    using std::deque<T>::operator[];
А>};
А>


А>а конкретно компилер ругается на отсутствие включаемого члена (оператора индекса).


А>подскажите плиз в чем проблема


А что именно говорит? Что за компиллер? У меня под gcc все ок.

PS Может в выделенном дело?
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[2]: подскажите по воподу using в классах
От: sux Земля  
Дата: 26.02.07 10:33
Оценка:
Здравствуйте, dr.Chaos, Вы писали:

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


DC>А что именно говорит? Что за компиллер? У меня под gcc все ок.


member identifier expected

DC>PS Может в выделенном дело?


в оригинале так и есть
Re[3]: подскажите по воподу using в классах
От: sux Земля  
Дата: 26.02.07 10:53
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


B>>Если это VC6 то победить можно так:

B>>
B>>template <class T>
B>>class mydeque : private std::deque<T>
B>>{
B>>   typedef std::deque<T> Base;
B>>   using Base::operator[];
B>>};
B>>


B>>Если нет — то остается только брать в руки бубен...


А>bcb 6.0 sp4


А>те же яйца — member identifier expected ((((((((((


короче пришлось сделать так:

std::deque<T>::reference operator[](std::size_t index)    { return deque<T>::operator[](index); }


но сам факт тупости компилера меня удивил
Re: подскажите по воподу using в классах
От: Roman Odaisky Украина  
Дата: 26.02.07 11:42
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>не работает такой код:


А>
А>template <class T>
А>class mydeque : private std::deque<T>
А>{
А>    using std::deque<T>::operator[];
А>};
А>


А>а конкретно компилер ругается на отсутствие включаемого члена (оператора индекса).


Попробуй просто
std::deque<T>::operator[];


P. S. Не надо наследоваться от того, от чего не надо наследоваться.
До последнего не верил в пирамиду Лебедева.
Re[4]: подскажите по воподу using в классах
От: Bell Россия  
Дата: 26.02.07 12:11
Оценка:
Здравствуйте, sux, Вы писали:

...

sux>но сам факт тупости компилера меня удивил


Сам я с bcb не работал, но судя по отзывам, тут удивляться совершенно нечему
Любите книгу — источник знаний (с) М.Горький
Re[2]: подскажите по воподу using в классах
От: Bell Россия  
Дата: 26.02.07 12:15
Оценка: +1
Здравствуйте, Roman Odaisky, Вы писали:


RO>P. S. Не надо наследоваться от того, от чего не надо наследоваться.


ИМХО не стОит давать советов в стиле "только так и никак иначе".
Любите книгу — источник знаний (с) М.Горький
Re[2]: подскажите по воподу using в классах
От: sux Земля  
Дата: 26.02.07 12:38
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

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


А>>не работает такой код:


RO>Попробуй просто

RO>
RO>std::deque<T>::operator[];
RO>

пасибо


RO>P. S. Не надо наследоваться от того, от чего не надо наследоваться.

я делаю класс находящийся в отношении "as-a", т.е. "реализуемый посредством" дека.
городить композицию не вижу смысла (из-за лишнего уровня косвенности), тем более я от нее и ухожу
Re[3]: подскажите по воподу using в классах
От: sux Земля  
Дата: 26.02.07 13:04
Оценка:
Здравствуйте, sux, Вы писали:

RO>>Попробуй просто

RO>>
RO>>std::deque<T>::operator[];
RO>>

sux>пасибо

пардон — поспешил, не работает
Re[3]: подскажите по воподу using в классах
От: Roman Odaisky Украина  
Дата: 28.02.07 16:27
Оценка:
Здравствуйте, Bell, Вы писали:

RO>>P. S. Не надо наследоваться от того, от чего не надо наследоваться.


B>ИМХО не стóит давать советов в стиле «только так и никак иначе».


Что характерно, я и не даю :)
До последнего не верил в пирамиду Лебедева.
Re[2]: подскажите по воподу using в классах
От: Pavel Chikulaev Россия  
Дата: 01.03.07 14:10
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

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


А>>не работает такой код:


А>>
А>>template <class T>
А>>class mydeque : private std::deque<T>
А>>{
А>>    using std::deque<T>::operator[];
А>>};
А>>


А>>а конкретно компилер ругается на отсутствие включаемого члена (оператора индекса).


RO>Попробуй просто

RO>
RO>std::deque<T>::operator[];
RO>

Зачем рекомендовать deprecated(7.3.3/16) вещи (access-declaration (11.3) )? Мы можем и должны использовать using-declaration для member-declaration (7.3.3/4) в данном случае

7.3.3/16
[Note: use of access-declarations (11.3) is deprecated; member using-declarations provide a better alternative.]

11.3/1
The access of a member of a base class can be changed in the derived class by mentioning its qualified-id in the derived class declaration. Such mention is called an access declaration. The effect of an access declaration qualified-id ; is defined to be equivalent to the declaration using qualified-id ; 100)
100) Access declarations are deprecated; member using-declarations (7.3.3) provide a better means of doing the same things. In earlier
versions of the C + + language, access declarations were more limited; they were generalized and made equivalent to using-declarations.

7.3.3/3
Every using-declaration is a declaration and a member-declaration and so can be used in a class definition.

7.3.3/4
A using-declaration used as a member-declaration shall refer to a member of a base class of the class being defined, shall refer to a member of an anonymous union that is a member of a base class of the class being defined, or shall refer to an enumerator for an enumeration type that is a member of a base class of the class being defined.

Да и вообще много интересного еще есть в пункте 7.3


RO>P. S. Не надо наследоваться от того, от чего не надо наследоваться.

Это не public наследование, а private, да и просто меньше писать, чем если бы класс содержал std::queue<>, так как пришлось бы писать две функции — T & operator [] (std::size_t) и T & operator [] (std::size_t) const, а так очень лаконично.
Re[3]: подскажите по воподу using в классах
От: Lorenzo_LAMAS  
Дата: 01.03.07 14:15
Оценка:
PC>Зачем рекомендовать deprecated(7.3.3/16) вещи (access-declaration (11.3) )? Мы можем и должны использовать using-declaration для member-declaration (7.3.3/4) в данном случае

Затем, наверное, что компилятор глючит (?) и надо его хоть как-то "перехитрить" (хоть и не вышло)
Of course, the code must be complete enough to compile and link.
Re[4]: подскажите по воподу using в классах
От: Pavel Chikulaev Россия  
Дата: 01.03.07 14:18
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

PC>>Зачем рекомендовать deprecated(7.3.3/16) вещи (access-declaration (11.3) )? Мы можем и должны использовать using-declaration для member-declaration (7.3.3/4) в данном случае


L_L>Затем, наверное, что компилятор глючит (?) и надо его хоть как-то "перехитрить" (хоть и не вышло)

Для не шаблонных классов у меня вроде работало...
Re[5]: подскажите по воподу using в классах
От: Lorenzo_LAMAS  
Дата: 01.03.07 14:19
Оценка:
L_L>>Затем, наверное, что компилятор глючит (?) и надо его хоть как-то "перехитрить" (хоть и не вышло)
PC>Для не шаблонных классов у меня вроде работало...

На BCB ?
Of course, the code must be complete enough to compile and link.
Re[5]: подскажите по воподу using в классах
От: sux Земля  
Дата: 01.03.07 14:24
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>Здравствуйте, Lorenzo_LAMAS, Вы писали:


PC>>>Зачем рекомендовать deprecated(7.3.3/16) вещи (access-declaration (11.3) )? Мы можем и должны использовать using-declaration для member-declaration (7.3.3/4) в данном случае


L_L>>Затем, наверное, что компилятор глючит (?) и надо его хоть как-то "перехитрить" (хоть и не вышло)

PC>Для не шаблонных классов у меня вроде работало...
именна, именна
Re[6]: подскажите по воподу using в классах
От: sux Земля  
Дата: 01.03.07 14:27
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>>>Затем, наверное, что компилятор глючит (?) и надо его хоть как-то "перехитрить" (хоть и не вышло)

PC>>Для не шаблонных классов у меня вроде работало...

L_L>На BCB ?

да. проблема именно в шаблонных классах.

з.ы. могу еще посмешить: на BDS2006 и TurboC++2006 — компилер ваще ложицца с "internal compiler error"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.