реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> специализация шаблонов для диапазона и/или, перечисления значений параметра
ig_z
сообщение Nov 12 2007, 15:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



Вопрос не по ИАРу, но тем не менее.

Есть ли в стандарте языка способ специализировать шаблон для диапазона значений пар-ра (ну или для перечисленных значений этого пар-ра).
Например:
имеем шаблон с параметром типа инт. Хотелось бы иметь одну специализацию для диапазона значений параметра 0..255, другую специализацию для диапазона 256..65535, и тд.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Nov 12 2007, 16:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(ig_z @ Nov 12 2007, 18:51) *
Есть ли в стандарте языка способ специализировать шаблон для диапазона значений пар-ра (ну или для перечисленных значений этого пар-ра).


В плюсах это сделать можно, но несколько извращенно.

Делаете шаблон-реализацию с неким шаблонным параметром. Например, size_t sizeOfVars. Пишете две специализации - для параметра, равного 1 и 2. Потом пишете другой шаблонный класс - обертку со всеми inline функциями, который будет использовать нужную конкретную специализацию базового шаблона. Например, от нее отнаследовавшись.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Nov 14 2007, 08:58
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Ну если диапазон 0..255 и 256..65535 - то писать обертки наверное задолбаешься. Тогда уж определить макрос типа
Код
#define DIAPAZON(a, b) ( ((a)==0 && (b)==255) ? 1 : 2)

template<int diapazonNum>
class TMyClass
{};

template<int diapazonNum = 1>
class TMyClass
{};

template<int diapazonNum = 2>
class TMyClass
{};


TMyClass<DIAPAZON(0, 255)> a;
TMyClass<DIAPAZON(256, 65535)> b;
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 14 2007, 09:15
Сообщение #4


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(ig_z @ Nov 12 2007, 18:51) *
Есть ли в стандарте языка способ специализировать шаблон для диапазона значений пар-ра (ну или для перечисленных значений этого пар-ра).
Например:
имеем шаблон с параметром типа инт. Хотелось бы иметь одну специализацию для диапазона значений параметра 0..255, другую специализацию для диапазона 256..65535, и тд.

Использование шаблона подразумевает знание параметра на этапе компиляции.
Не проще ли тогда иметь переопределяемую функцию для параметров: char и unsigned short ?
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Nov 14 2007, 10:27
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(alexander55 @ Nov 14 2007, 12:15) *
Использование шаблона подразумевает знание параметра на этапе компиляции.

Не понял вашей мысли - в чем противоречие между специализацией шаблона и знанием параметра на этапе компиляции?
Цитата
Не проще ли тогда иметь переопределяемую функцию для параметров: char и unsigned short ?

Тоже не понял - в чем связь между шаблоном класса/функции и перегрузкой функции?
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 14 2007, 11:16
Сообщение #6


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Непомнящий Евгений @ Nov 14 2007, 13:27) *
Не понял вашей мысли - в чем противоречие между специализацией шаблона и знанием параметра на этапе компиляции?

Противоречия нет.

Цитата(Непомнящий Евгений @ Nov 14 2007, 13:27) *
Тоже не понял - в чем связь между шаблоном класса/функции и перегрузкой функции?

Я имею ввиду, что есть альтернатива.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016