Информация об изменениях

Сообщение Re[2]: Специализация шаблонов по 2 параметрам от 20.02.2016 10:14

Изменено 20.02.2016 10:15 SVV

Здравствуйте, Erop, Вы писали:

E>Здравствуйте, SVV, Вы писали:


SVV>>предположим, в качестве T будут использоваться типы char и wchar, как и в качестве T2. Как прописать специализацию не только по Т2?


E>Просто интересно, а зачем это надо?

E>Ну, грубо говоря, если мы как-то особо работаем с whar_t, например, и как-то ещё иначе особо с char, то может лучше иметь шаблон, кторй работает как-то в целом, а для этих типав специализирован, а потом уже на этом шаблоне реализовывать конструктор class Test?

E>То есть, я вполне верю, что есть ситуации, когда надо и так, как надо тебе, но мне интересно каковы они.

E>Не поделишься?
Делюсь:
если делается класс для работы как с char так и с wchar_t то конструкторов должно быть минимум 4:
для char версии класса:
Test(const char *) — обычная инициализация
Test(const wchar_t *) — инициализация конвертацией wide строки в char
для wchar_t версии класса:
Test(const char *) — инициализация конвертацией char строки в wide
Test(const wchar_t *) — обычная инициализация

те же минимум 4 operator= (&), operator=(&&) и конструкторы Test (&&)

и да, основной функционал запихнул в глобальные inline функции. надеюсь компилятор прооптимизирует. просто сейчас есть TestA версия и TestW версия отдельно, и я смотрю что он сильно похожи, правишь что-то в одном классе и надо лезть аналогичные правки делать в другом. и хорошо если классов 2 а не больше.
Re[2]: Специализация шаблонов по 2 параметрам
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, SVV, Вы писали:


SVV>>предположим, в качестве T будут использоваться типы char и wchar, как и в качестве T2. Как прописать специализацию не только по Т2?


E>Просто интересно, а зачем это надо?

E>Ну, грубо говоря, если мы как-то особо работаем с whar_t, например, и как-то ещё иначе особо с char, то может лучше иметь шаблон, кторй работает как-то в целом, а для этих типав специализирован, а потом уже на этом шаблоне реализовывать конструктор class Test?

E>То есть, я вполне верю, что есть ситуации, когда надо и так, как надо тебе, но мне интересно каковы они.

E>Не поделишься?
Делюсь:
если делается класс для работы как с char так и с wchar_t то конструкторов должно быть минимум 4:
для char версии класса:
Test(const char *) — обычная инициализация
Test(const wchar_t *) — инициализация конвертацией wide строки в char
для wchar_t версии класса:
Test(const char *) — инициализация конвертацией char строки в wide
Test(const wchar_t *) — обычная инициализация

те же минимум 4 operator= (&), operator=(&&) и конструкторы Test (&&)

и да, основной функционал запихнул в глобальные inline функции. Надеюсь, компилятор прооптимизирует. Просто сейчас есть TestA версия и TestW версия отдельно, и я смотрю что они сильно похожи, правишь что-то в одном классе и надо лезть аналогичные правки делать в другом. И хорошо если классов 2 а не больше.