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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
sergio1
 Аватар для sergio1
12 / 1 / 1
Регистрация: 08.11.2008
Сообщений: 41
06.04.2011, 22:55     Специализация шаблонного класа #1
Каким образом можно написать специализацию шаблонного класса так, чтобы часть методов являлась специализированной, то есть писалась заново, а остальные методы - такие, какими бы они были если бы шаблонный клас был без специализации.
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
бжни
 Аватар для alex_x_x
2441 / 1646 / 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
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,352
Записей в блоге: 26
09.04.2011, 00:38     Специализация шаблонного класа #22
Цитата Сообщение от ForEveR Посмотреть сообщение
ну кто же мешает поизвращаться-то...
Как бы концептуально неправильно через один шаблон делать непохожие вещи. Шаблон используется для похожих вещей
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,352
Записей в блоге: 26
09.04.2011, 10:11     Специализация шаблонного класа #24
Тему на форуме так и не нашёл, но был хороший пример, демонстрирующий нечёткое понимание ООП.

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

Вот и в данном случае имеет место быть такая же идеологическая ошибка. Если "специализация" класса выливается в то, что какие-то методы класса должны быть отключены, то для этого надо делать другой шаблон. Потому что предложенная "специализация" на самом деле описывает отдельную сущность, а не специализацию шаблона
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,352
Записей в блоге: 26
09.04.2011, 10:53     Специализация шаблонного класа #26
Цитата Сообщение от Deviaphan Посмотреть сообщение
С переводом на термины проекта ТС
ТС вообще толком не сказал, что он хочет, а потому я бы не стал гадать
Yandex
Объявления
09.04.2011, 10:53     Специализация шаблонного класа
Ответ Создать тему
Опции темы

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