Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Наследование частично специализированного шаблона |
Автор: georain 31.1.2008, 11:25 | ||
Есть класс - шаблон с двумя специализациями Другой класс - шаблон наследует одну из специализаций в зависимости от своих параметров Неспециализированный класс не определён В нижеприведённом коде члены класса base не декларированы в классе derived, почему? (то что специализации почти одинаковые не обращайте внимания, это сделано для упрощения приведённого кода) (компиляторы gcc4.1 и icc10.0)
|
Автор: Lazin 31.1.2008, 12:24 | ||||
а ты вместо
напиши
|
Автор: georain 31.1.2008, 12:42 |
Неа, не помогает. Тоже самое. |
Автор: Lazin 31.1.2008, 12:49 |
visual studio 8 это компилирует на ура.. что пишет компилятор? |
Автор: archimed7592 31.1.2008, 13:13 | ||
14.6.2/3
Нужно this->type/base::Type. Добавлено через 1 минуту и 50 секунд MSVC плохо соответствует Стандарту... После него часть кода приходится переделывать :(. |
Автор: georain 31.1.2008, 13:59 | ||||
Точняк! archimed7592, вновь спасибо! ![]() Надо перед всеми переменными поставить
или
|
Автор: archimed7592 31.1.2008, 16:46 |
Лучше сделать typedef ... Base; в class-scope(со спецификатором доступа private). |
Автор: null56 15.1.2009, 21:23 | ||
Это получается стандарт с++ и такой код будет переносим на любые компиляторы, соответствующие этому стандарту, включая вижуал студио? И еще вопросик, данной утверждение относится только для наследования от шаблона? Когда класс наследуется от обычного класса по стандарту необходимость явного указания базового класса или указателя this отпадает?
|
Автор: Kallikanzarid 15.1.2009, 21:53 |
null56, в твоем коде много причин для не-компиляции ![]() |
Автор: null56 15.1.2009, 22:54 |
Kallikanzarid, при чем тут мой код? Вопрос стоит в обращении к переменным базового шаблонного класса и обычного... и как это верно делать по стандарту, а не МВС |
Автор: vinter 16.1.2009, 08:10 |
ненужен там this |
Автор: null56 16.1.2009, 10:02 | ||||
без this, вот чего происходит
Вывод получаем
То есть обратиться можно только через явное указание базового класса, либо через this |
Автор: null56 16.1.2009, 11:15 | ||
а как это реализовать? |
Автор: vinter 16.1.2009, 19:10 |
VS2008 собирает |
Автор: UnrealMan 16.1.2009, 19:42 | ||
Вывод: VC++ нарушает стандарт.
Стандарт требует, чтобы такая программа выводила 1, а не 2. |
Автор: georain 23.1.2009, 19:54 | ||
|