Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> частичная специализация для определенного набора -, параметров 
V
    Опции темы
boostcoder
Дата 7.8.2011, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



есть такой шаблон:
Код

template<bool, bool, bool, enum, enum>
struct type;

что нужно сделать, чтоб постоянно не перечислять некоторые параметры?
т.е. чтоб можно было использовать как-то так:
Код

typedef some_template<true, true, false> parms_pack_one;

...

template<>
struct type<parms_pack_one, enum::item, enum::item2> {
   ...
};


спасибо.

Это сообщение отредактировал(а) boostcoder - 7.8.2011, 11:17
PM WWW   Вверх
asmdzen
Дата 7.8.2011, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



Код

template<int M, int N, bool X = true, bool Y = true, bool Z = false >
struct type;

type<10, 20> def_params;


хотя я не уверен что оно.

http://drdobbs.com/architecture-and-design/184403850

Это сообщение отредактировал(а) asmdzen - 7.8.2011, 12:28
PM MAIL   Вверх
boostcoder
Дата 7.8.2011, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



asmdzen, такой способ я знаю. но дефолтными нужно сделать параметры слева.
PM WWW   Вверх
boostcoder
Дата 8.8.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



наверное сабж невозможен...


есть другая идея: вместо bool`ов использовать одну целочисленную переменную и шаблоны-предикаты которые будут проверять состояние бит в переменной.
но тут вопрос: в compile-time можно использовать операции над битами?
PM WWW   Вверх
boostcoder
Дата 8.8.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



а еще, с операциями над битами я не дружу smile 
PM WWW   Вверх
mes
Дата 8.8.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  7.8.2011,  14:17 Найти цитируемый пост)
но дефолтными нужно сделать параметры слева. 

а перенести их вправо нее судьба ?

Цитата(boostcoder @  8.8.2011,  18:48 Найти цитируемый пост)
но тут вопрос: в compile-time можно использовать операции над битами? 

если два констехпра, то и рузультат такой же.. 

Цитата(boostcoder @  8.8.2011,  19:22 Найти цитируемый пост)
а еще, с операциями над битами я не дружу   

 smile 


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 8.8.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



boostcoder

запросто.

группируем флаги в какую-нибудь группу
Код

template <bool b1, bool b2, bool b3>
struct params_pack
{
   enum
   {
       b1_value = b1,
       b2_value = b2,
       b3_value = b3
   };
};

дальше определяем группы
Код

typedef params_pack<true, true, false> parms_pack_one;
typedef params_pack<true, false, true> parms_pack_two;

реальную структуру type прячем под другим именем, например type_ и меняем три шаблонных переменных заменяем на группу
Код

template <typename ppack, unsigned, unsigned>
struct type_;

далее специализируем type_
Код

template<> struct type_<parms_pack_one, 0, 0> {};
template<> struct type_<parms_pack_two, 0, 0> {};

далее осталось перенаправить тип type<bool b1, bool b2, bool b3, unsigned e1, unsigned e2> на type_<params_pack<b1, b2, b3>, e1, e2>.
Тут небольшая загвоздка, шаблонный typedef пока вроде не поддерживается
Код

template<bool b1, bool b2, bool b3, unsigned e1, unsigned e2>
using type = type_<params_pack<b1, b2, b3>, e1, e2>;

потому придется как-то так
Код

template<bool b1, bool b2, bool b3, unsigned e1, unsigned e2>
struct type
{
    typedef type_<params_pack<b1, b2, b3>, e1, e2> realtype;
};


В итоге получается что-то в этом роде
Код

template <typename ppack, unsigned, unsigned>
struct type_;

template <bool b1, bool b2, bool b3>
struct params_pack
{
   enum
   {
       b1_value = b1,
       b2_value = b2,
       b3_value = b3
   };
};

typedef params_pack<true, true, false> parms_pack_one;
typedef params_pack<true, false, true> parms_pack_two;

template<> struct type_<parms_pack_one, 0, 0> {};
template<> struct type_<parms_pack_two, 0, 0> {};

template<bool b1, bool b2, bool b3, unsigned e1, unsigned e2>
struct type
{
    typedef type_<params_pack<b1, b2, b3>, e1, e2> realtype;
};

/* using */
type<true, true, false, 0, 0>::realtype t;



конечно, если это группа boolean типов, то лучше использовать битовые операции.

Цитата(boostcoder @  8.8.2011,  20:22 Найти цитируемый пост)
а еще, с операциями над битами я не дружу   

http://forum.vingrad.ru/index.php?showtopi...t&p=2381904


Это сообщение отредактировал(а) azesmcar - 8.8.2011, 21:16
PM   Вверх
boostcoder
Дата 8.8.2011, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



azesmcar, спасибо огромное. буду пробовать таким способом smile 


зы
Цитата(azesmcar @  8.8.2011,  21:02 Найти цитируемый пост)
http://forum.vingrad.ru/index.php?showtopi...t&p=2381904

у меня есть два момента(это которые я осознаю) которые мне никак в голову не лезут:
1. регекспы.
2. операции над битами.

сколько я не пытался.. smile 
PM WWW   Вверх
azesmcar
Дата 8.8.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(boostcoder @  8.8.2011,  21:15 Найти цитируемый пост)
сколько я не пытался..   

будет время, попробую описать более подробно.
PM   Вверх
boostcoder
Дата 8.8.2011, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(azesmcar @  8.8.2011,  21:02 Найти цитируемый пост)
template <typename ppack, unsigned, unsigned>
struct type_;

а тут обязательно enum заменять на unsigned?
PM WWW   Вверх
azesmcar
Дата 9.8.2011, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(boostcoder @  8.8.2011,  21:53 Найти цитируемый пост)
а тут обязательно enum заменять на unsigned? 

нет, просто мой компилятор этого не поддерживал.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.