Название: Видимость в template Отправлено: Igors от Декабрь 04, 2015, 14:11 Добрый день
Код Причем одни компиляторы пропускают, др нет. Понятно что если я "инстанциирую" Derived классом у которого нет Mеthod1, то по-любому ошибка (и это правильно). Но тут до инстанциации дело не доходит, просто не компилит текст выше. Есть ли отвечающая за это опция? Спасибо Название: Re: Видимость в template Отправлено: vregess от Декабрь 04, 2015, 16:09 Попробуй
Код
Название: Re: Видимость в template Отправлено: Igors от Декабрь 04, 2015, 16:41 Попробуй И что, так дрочиться для каждого метода по всему тексту? А если будут виртуалы, то вообще завал. Если уж латать, то лучше using - но вопрос был не о томКод
Название: Re: Видимость в template Отправлено: Racheengel от Декабрь 05, 2015, 01:30 А почему Derived должен видеть Method1?
Ведь он от Base не наследован. Название: Re: Видимость в template Отправлено: vregess от Декабрь 05, 2015, 08:19 Причем одни компиляторы пропускают, др нет. Скорее всего такие компиляторы (которые пропускают) просто не обращают внимание на шаблон, который не используется, т.е. проверяют синтаксис и все, а что там дальше откладывают до момента появления в коде. Так, на пример, поступит MSVC, но gcc кинет ошибку. Есть ли отвечающая за это опция? Вряд ли есть такая опция. Название: Re: Видимость в template Отправлено: alex312 от Декабрь 05, 2015, 11:15 надо вызывать унаследованные методы через this.
Код
Название: Re: Видимость в template Отправлено: Igors от Декабрь 05, 2015, 14:57 надо вызывать унаследованные методы через this. Это тоже "как латать", напр я получил эту проблему в open-sources, мне надо их менять, а для след версии - опять.. т.е. проверяют синтаксис и все, а что там дальше откладывают до момента появления в коде. Эту фразу слышал/читал много раз, но что в данном случае есть "проверка синтаксиса"? Выходит он понимает что Method1 - что-то глобальное, а описания нет, вот и ошибка. А если using или this, то это метод темплейт-класса и его надо оставить в покое до момента инстанциации. Вроде "логично" но почему не однообразно и где это регламентируется? Название: Re: Видимость в template Отправлено: m_ax от Декабрь 05, 2015, 20:57 Цитировать Это тоже "как латать", напр я получил эту проблему в open-sources, мне надо их менять, а для след версии - опять Сталкивался я как то с такой проблемой, не соврать, ZThread была та библиотека.. Тож пришлось руками править.. Но ничего) Потом всё заработало) Название: Re: Видимость в template Отправлено: Racheengel от Декабрь 06, 2015, 00:04 Вообще странно, что у вас компилятор не игнорирует темплейты, которые не были инстанциированы...
Студия,например, просто пропускает такие шаблоны. Название: Re: Видимость в template Отправлено: Igors от Декабрь 06, 2015, 10:40 Вообще странно, что у вас компилятор не игнорирует темплейты, которые не были инстанциированы... Как??? Ведь студия "самый строгий компилятор"!! :) Правда icc тоже пропускает, но вот шланг и gcc нетСтудия,например, просто пропускает такие шаблоны. Название: Re: Видимость в template Отправлено: Racheengel от Декабрь 06, 2015, 11:49 Кто сказал, что студия строгая? :)
msvc компилит только инстанциированые классы. Но в принципе это правильно, какой смысл компилить неинстанциированный темплейт? Название: Re: Видимость в template Отправлено: _Bers от Декабрь 30, 2015, 01:18 Вроде "логично" но почему не однообразно и где это регламентируется? в стандарте. он разрешает оставить этот вопрос на усмотрение компиляторов. но при этом рекомендует два возможных подхода к реализации: "two-phase name lookup" и однофазный. gcc июзает двухфазный, студия - однофазный. при двухфазке компилятор строит АСД на основе имеющихся у него данных. и имеет полное право забить болт на какое то непонятное Т, которое до момента инстанцирования ему все равно никак не известно. но АСД он уже сможет построить. и стандарт ему это разрешает. а при однофазке АСД строится в момент инстанцирования, когда все типы итак уже известны. мораль простая: шаблоны + наследование = this->member. бесит, что тайпдефы тоже не наследуются: привет, копипаста. Название: Re: Видимость в template Отправлено: _Bers от Декабрь 30, 2015, 01:19 Кто сказал, что студия строгая? :) msvc компилит только инстанциированые классы. Но в принципе это правильно, какой смысл компилить неинстанциированный темплейт? оптимизация. гцц значительно более быстро билдит тяжелые шаблоны. |