Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
sergio1
12 / 1 / 1
Регистрация: 08.11.2008
Сообщений: 41
#1

Специализация шаблонного класа - C++

06.04.2011, 22:55. Просмотров 3051. Ответов 25
Метки нет (Все метки)

Каким образом можно написать специализацию шаблонного класса так, чтобы часть методов являлась специализированной, то есть писалась заново, а остальные методы - такие, какими бы они были если бы шаблонный клас был без специализации.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <int Size>
class MyClass
{
public:
  int Method1();
  int Method2();
};
 
template <>
class MyClass<0>
{
public:
  /* хотелось бы не писать еще раз реализацию, так как она меняться не должна. */
  int Method1();
  /* Новая реализация. */
  int Method2();
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.04.2011, 22:16     Специализация шаблонного класа #21
Цитата Сообщение от Deviaphan Посмотреть сообщение
Тогда нужно будет в унаследованном классе переместить эти методы в private. Но ничто не помешает вызвать их полиморфно.
Да и видимость методов в дочерних классах лучше не менять.
совершенно верно, на уровне синтаксиса это возможно, но в ++ нельзя изменять видимость части интерфейса

следующее совершенно валидно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
#define PRINT std::cout << "(" << __FUNCTION__ << ") "
 
class A
{
public:
  virtual void getA(){ PRINT; }
private:
  virtual void getB(){ PRINT; }
};
 
class B : public A
{
  virtual void getA(){ PRINT; }
};
 
int main()
{
  B b;
  ((A*)&b) -> getA();
}
Evg
Эксперт CАвтор FAQ
17292 / 5540 / 347
Регистрация: 30.03.2009
Сообщений: 15,083
Записей в блоге: 26
09.04.2011, 00:38     Специализация шаблонного класа #22
Цитата Сообщение от ForEveR Посмотреть сообщение
ну кто же мешает поизвращаться-то...
Как бы концептуально неправильно через один шаблон делать непохожие вещи. Шаблон используется для похожих вещей
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.04.2011, 06:38     Специализация шаблонного класа #23
Без джамперной функции
C++
1
2
3
4
5
6
template<>
class Some<0>:protected BaseMethods
{
public:
        using BaseMethods::Method3;
};
Evg
Эксперт CАвтор FAQ
17292 / 5540 / 347
Регистрация: 30.03.2009
Сообщений: 15,083
Записей в блоге: 26
09.04.2011, 10:11     Специализация шаблонного класа #24
Тему на форуме так и не нашёл, но был хороший пример, демонстрирующий нечёткое понимание ООП.

Нужно было завести класс "асбстрактная комната". Далее от него сделать производные классы "кухня" и "жилая комната". Далее сделать класс "однокомнатная квартира", в который бы входили "кухня" и "жилая комната". До этого момента всё правильно. Далее требовалось создать класс "двухкомнатная квартира", который есть производный класс от "однокомнатная квартира" и в котором есть дополнительное поле "вторая жилая комната". Вот это место идеологически НЕ правильное, потому что двухкомнатная квартира НЕ является производной от однокомнатной. Хотя с технической точки зрения такой код будет работать. Правильной реализацией явилось бы создание отдельного класса "двухкомнатная квартира", содержащего в себе кухню и две комнаты. Ну либо как вариант работать от класса "абстрактная квартира".

Вот и в данном случае имеет место быть такая же идеологическая ошибка. Если "специализация" класса выливается в то, что какие-то методы класса должны быть отключены, то для этого надо делать другой шаблон. Потому что предложенная "специализация" на самом деле описывает отдельную сущность, а не специализацию шаблона
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.04.2011, 10:49     Специализация шаблонного класа #25
Цитата Сообщение от Evg Посмотреть сообщение
для этого надо делать другой
Класс Квартира, который будет агрегировать Комнаты.
С переводом на термины проекта ТС.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2011, 10:53     Специализация шаблонного класа
Еще ссылки по теме:

C++ Явная специализация шаблонного класса
Вызов метода у шаблонного поля, шаблонного класса C++
Обьявление полей класа C++
Инициализация статической константы класа C++
Специализация шаблонного класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17292 / 5540 / 347
Регистрация: 30.03.2009
Сообщений: 15,083
Записей в блоге: 26
09.04.2011, 10:53     Специализация шаблонного класа #26
Цитата Сообщение от Deviaphan Посмотреть сообщение
С переводом на термины проекта ТС
ТС вообще толком не сказал, что он хочет, а потому я бы не стал гадать
Yandex
Объявления
09.04.2011, 10:53     Специализация шаблонного класа
Ответ Создать тему
Опции темы

Текущее время: 00:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru