Здравствуйте, _Dreamer, Вы писали:
_D>ну если почему то нельзя сделать специализацию внутри, вот так — _D>
_D>
"ComeauTest.c", line 12: error: explicit specialization is not allowed in the
current scope
template <>
_D>то можно наследоваться от базового, и его уже специализировать _D>
_D>
У этого подхода два недостатка:
1. Базовый класс объявлен вне Bar, соответсвенно в нём не определены его (Bar'а) typedef'ы.
2. Вместо уменьшения кода получается его раздутие. Проще тогда уже вообще отказаться от вложенного шаблона и просто сделать два разных класса.
Здравствуйте, Константин Л., Вы писали:
КЛ>Что это выд.? Что не работает то? Где ошибка и что говорит?
Comeau C/C++ 4.3.8 (Aug 19 2006 13:36:48) for ONLINE_EVALUATION_Alpha1
Copyright 1988-2006 Comeau Computing. All rights reserved.
MODE:strict errors C++
"ComeauTest.c", line 27: error: nontype "Bar<T>::Nested [with T=T]" is not a
template
void Bar<T>::Nested<FirstSelector>::test()
^
"ComeauTest.c", line 32: error: nontype "Bar<T>::Nested [with T=T]" is not a
template
void Bar<T>::Nested<SecondSelector>::test()
^
MSVC 7.1 тоже не сильно информативную ошибку выдаёт:
NestedTemplates.cpp(35): error C3855: 'Bar<T>::Nested': template parameter 'U' is incompatible with the declaration
При этом Комо хочет, чтобы параметры при специализации шли так:
template <> template <typename T>
а MSVC наоборот:
template <typename T> template <>
Вот я и внепонятках.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
"ComeauTest.c", line 27: error: partial specialization of nontype
"Bar<T>::Nested<FirstSelector>::test" is not allowed
void Bar<T>::template Nested<FirstSelector>::test()
^
"ComeauTest.c", line 32: error: nontype "Bar<T>::Nested [with T=T]" is not a template,
Should it be XX::nontype "Bar<T>::Nested [with T=T]"?, where XX is some namespace?
Did you #include the right header?
void Bar<T>::Nested<SecondSelector>::test()
^
Я так понимаю, что первое сообщение, говорит, что нельзя делать частичную специализацию не типа. Но я же специализирую как раз тип, а не его метод. Такая же специализация для нешаблонного родительского класса вполне корректна (см. мой пост выше).
А второе сообщение означает, что компилятор не может определить, что Bar<T>::Nested является шаблонным типом, и предполагает, что его полное объявление недоступно. Но это как-то странно.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
"frogkiller" <51834@users.rsdn.ru> wrote in message news:2679250@news.rsdn.ru... > Здравствуйте, frogkiller, Вы писали: > > F>Здравствуйте, Константин Л., Вы писали: > > Кстати, если указать компилятору, что это шаблон: >
> "ComeauTest.c", line 27: error: partial specialization of nontype
> "Bar<T>::Nested<FirstSelector>::test" is not allowed
> void Bar<T>::template Nested<FirstSelector>::test()
> ^
>
> "ComeauTest.c", line 32: error: nontype "Bar<T>::Nested [with T=T]" is not a template,
> Should it be XX::nontype "Bar<T>::Nested [with T=T]"?, where XX is some namespace?
> Did you #include the right header?
> void Bar<T>::Nested<SecondSelector>::test()
> ^
> Я так понимаю, что первое сообщение, говорит, что нельзя делать частичную специализацию не типа. Но я же специализирую как раз тип, а не его метод. Такая же специализация для нешаблонного родительского класса вполне корректна (см. мой пост выше). > А второе сообщение означает, что компилятор не может определить, что Bar<T>::Nested является шаблонным типом, и предполагает, что его полное объявление недоступно. Но это как-то странно.
А чето я не понял, где здесь собственно частичная специализация. По-моему это обычная explicit specialization и подходит под явный запрет из 14.7.3.18.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sergey, Вы писали:
S>А чето я не понял, где здесь собственно частичная специализация. По-моему это обычная explicit specialization и подходит под явный запрет из 14.7.3.18.
Во! Спасибо. Что-то меня переклинило
А вообще было бы удобно...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.