Заблокирован
|
|||||||||||
1 | |||||||||||
шаблонные методы шаблона. Специализация.07.02.2012, 11:31. Показов 6055. Ответов 5
Метки нет (Все метки)
Вопрос: каким образом можно вынести реализацию методов класса за его пределы?
Изначально вопрос формулировался так: Каким образом можно произвести специализацию одного из методов шаблона класса так, что бы эта специализация зависела только от одного (или нескольких) параметров шаблона, но не от всех? Другими словами, как можно частично специализировать отдельно взятый метод шаблона так, что бы при этом не пришлось частично специализировать весь класс целиком. Однако, ответ на этот вопрос был найден. Ниже представленный код этот момент иллюстрирует:
Но я не люблю, когда у меня декларативная часть класса захламляется реализациями методов. Вопрос: каким образом можно вынести реализацию методов класса за его пределы? Вообще, всегда думал, что правильно - сначала пишется шапка класса-владельца, потом пишется шапка шаблонного метода. Использовал такой способ:
0
|
07.02.2012, 11:31 | |
Ответы с готовыми решениями:
5
Специализация шаблона для всех наследников класса Msvc2015 специализация шаблона для массива нулевого размера Явная специализация шаблона класса и ее методы Специализация шаблона |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
07.02.2012, 12:39 | 2 | |||||
Bers, Вышепреведенный код у меня тупо не компилируется.
Добавлено через 29 секунд http://liveworkspace.org/code/... ac42de4760 Добавлено через 8 минут Пока смог выродить только такое (=
Собственно создается впечатление, что такое вытворить можно только специализируя полностью и класс и функцию.
0
|
Заблокирован
|
||||||
07.02.2012, 12:39 [ТС] | 3 | |||||
Я компилировал в 2008 студии.
На самом деле я уже нашёл приемлемое решение проблемы. Но все равно интересно - почему, если студия позволяет специализировать шаблонный мембер внутри класса, она никак не хочет делать этого снаружи? Или может быть я просто не знаю, как правильно... Ну а что касается gcc (онлайн компилятор же он? ) то... надо полагать, либо он не очень хорошо соотносится со стандартом, либо студия в этом отношении, лучше выполняет стандарт (или наоборот, в очередной раз забила болт). Как на самом деле я понятия не имею... Хотелось бы конечно пролить свет на эту ситуацию. Если интересно - ниже представленный код, хоть и является суть "обходной путь", но так же имитирует "частичную специализацию мембера"
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
07.02.2012, 13:24 | 4 |
Добавлено через 11 минут На тему поддержки стандарта. gcc все делает верно. А вот MSVC не поддерживает данный пункт.
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
07.02.2012, 14:32 | 6 |
Bers, Вбил в поиске по документу template specialization... Открылся пункт 14.2... Ну и сидел читал, ибо было интересно, в этот пункт стандарта я не заглядывал подробно. Жестко конечно, но интересно.
1
|
07.02.2012, 14:32 | |
07.02.2012, 14:32 | |
Помогаю со студенческими работами здесь
6
Специализация шаблона специализация шаблона Специализация шаблона специализация шаблона Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |