Есть ли переносимая замена super?
От:
Digger
Дата: 04.04.03 11:37
Оценка:
В VC++7 ввели такую хорошую вещь как super, но нет ли переносимого способа реализовать, тоже самое (доступ к суперклассу без упоменания его имени)?
Чтобы писать программы голова не нужна, нужна клавиатура.
Re: Есть ли переносимая замена super?
От:
ssm
Дата: 04.04.03 11:39
Оценка:
1 (1)
Здравствуйте, Digger, Вы писали:
D>В VC++7 ввели такую хорошую вещь как super, но нет ли переносимого способа реализовать, тоже самое (доступ к суперклассу без упоменания его имени)?
А что в ней еще хорошего кроме непереносимости?
Re: Есть ли переносимая замена super?
Здравствуйте, Digger, Вы писали:
D>В VC++7 ввели такую хорошую вещь как super, но нет ли переносимого способа реализовать, тоже самое (доступ к суперклассу без упоменания его имени)?
Как завещал товарищ Страуструп:
class A : public B
{
typedef B super;
public:
A() : super(<params>)
{
}
}
Хотя он завещал не super, а inherited
Re[2]: Есть ли переносимая замена super?
Здравствуйте, Left2, Вы писали:
D>> В VC++7 ввели такую хорошую вещь как super <...>
L> L> class A : public B
L> {
L> typedef B super;
L>
Это не является адекватной заменой __super. Например:
class B
{
public :
void f(int );
};
class C
{
public :
void f(double );
};
class A : public B, public C
{
public :
void g()
{
__super::f(10); // эквивалентно B::f(10);
__super::f(0.5); // эквивалентно C::f(0.5);
}
};
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: Есть ли переносимая замена super?
Что это за super, как выглядит его использование? А главное, так ли это нужно?
Of course, the code must be complete enough to compile and link .
Re[3]: Есть ли переносимая замена super?
Павел, а ты пользуешься этой "чудесной" возможностью?
Надеюсь, в стандарт такого вносить не станут?
Of course, the code must be complete enough to compile and link .
Re[3]: Есть ли переносимая замена super?
От:
MaximE
Дата: 04.04.03 13:34
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>ПК>class B
ПК>{
ПК>public :
ПК> void f(int );
ПК>};
ПК>class C
ПК>{
ПК>public :
ПК> void f(double );
ПК>};
ПК>class A : public B, public C
ПК>{
ПК>public :
ПК> void g()
ПК> {
ПК> __super::f(10); // эквивалентно B::f(10);
ПК> __super::f(0.5); // эквивалентно C::f(0.5);
ПК> }
ПК>};
ПК>
struct Shim : public B, public C {};
class A : public Shim
{
typedef Shim super;
public :
void g()
{
super::f(10);
super::f(0.5);
}
}
Re[4]: Есть ли переносимая замена super?
Поздравляю с ambiquity
Of course, the code must be complete enough to compile and link .
Re[2]: Есть ли переносимая замена super?
От:
Digger
Дата: 04.04.03 13:40
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
LL>Что это за super, как выглядит его использование? А главное, так ли это нужно?
Например:
class A
{
virtual void F(){};
};
class B: public A
{
virtual void F(){
...
__super::F();
};
};
как видно, для доступа к суперклассу не нужно знать его имя, а это иногда удобно (например в шаблоне).
Чтобы писать программы голова не нужна, нужна клавиатура.
Re[3]: Есть ли переносимая замена super?
Из ответа Павла Кузнецова я уже понял что это. Мне такое не нравится.
Of course, the code must be complete enough to compile and link .
Re[4]: Есть ли переносимая замена super?
Здравствуйте, Lorenzo_LAMAS, Вы писали:
LL> Павел, а ты пользуется этой "чудесной" возможностью?
Я предпочитаю использовать переносимые решения, пока не "подопрет".
(В смысле, пока не пользуюсь).
LL> Надеюсь, в стандарт такого вносить не станут?
Почему? На мой взгляд, достаточно удобная штуковина, особенно в шаблонах.
Posted via RSDN NNTP Server 1.5 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[5]: Есть ли переносимая замена super?
От:
MaximE
Дата: 04.04.03 14:11
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
LL>Поздравляю с ambiquity
Не подумал. Облажался.
Внесены изменения автора. -- ПК.
Re[5]: Есть ли переносимая замена super?
Здравствуйте, Lorenzo_LAMAS, Вы писали:
LL>Поздравляю с ambiquity
А если
struct Shim : B, C
{
using B::f;
using C::f;
};
?
Re[6]: Есть ли переносимая замена super?
Здравствуйте, MaximE, Вы писали:
ME>ME>struct Shim : B, C
ME>{
ME> using B::f;
ME> using C::f;
ME>};
ME>
Увы
error C2875: using-declaration causes a multiple declaration of 'C::f'
... << RSDN@Home 1.0 beta 6a >>
Re[7]: Есть ли переносимая замена super?
Здравствуйте, Михаил Можаев, Вы писали:
ММ>Увы
ММ>error C2875: using-declaration causes a multiple declaration of 'C::f'
Забыл уточнить. Это — под VC6SP5.
А вот GCC правильно отрабатывает
Так что one more standard compliance issue...
... << RSDN@Home 1.0 beta 6a >>
Re[8]: Есть ли переносимая замена super?
От:
MaximE
Дата: 04.04.03 15:06
Оценка:
Здравствуйте, Михаил Можаев, Вы писали:
ММ>Забыл уточнить. Это — под VC6SP5.
ММ>А вот GCC правильно отрабатывает
ММ>Так что one more standard compliance issue...
Так значит на gcc работает?
Re[9]: Есть ли переносимая замена super?
Здравствуйте, MaximE, Вы писали:
ME>Так значит на gcc работает?
Работает. Вот пример, который я запускал:
#include <iostream>
struct B
{
void f(int ) { std::cout << "B::f()\n" ; }
};
struct C
{
void f(double ) { std::cout << "C::f()\n" ; }
};
struct Shim : public B, public C
{
using B::f;
using C::f;
};
class A : public Shim
{
typedef Shim super;
public :
void g()
{
super::f(10);
super::f(0.5);
}
};
int main()
{
A a;
a.g();
return 0;
}
... << RSDN@Home 1.0 beta 6a >>
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить