Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2013, 12:55   #1
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 671
По умолчанию Специализация шаблона

Приветствую товарищи!
Очень хочется специализировать структуру S для Q и его наследников:
Код:
class Q {};
class Q_d1 : public Q {};
class Q_d2 : public Q {};

template <typename T>
	struct S
	{
		static void fn() {cout<<"not_Q\n";}
	};

template <typename T> // шаблон для Q и его наследников.
	struct S<???>
	{
		static void fn() {cout<<"Q\n";}
	};
Если записать так:
Код:
class Q {};
class Q_d1 : public Q {};
class Q_d2 : public Q {};

template <typename T>
	struct S
	{
		static void fn() {cout<<"not_Q\n";}
	};

template <> // шаблон для Q и его наследников.
	struct S<Q>
	{
		static void fn() {cout<<"Q\n";}
	};
int main()
{
	S<Q_d1>::fn();
	return 0;
}
получаем: cout - not_Q.
220Volt вне форума Ответить с цитированием
Старый 11.04.2013, 13:10   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Это так легко не делается - формально Q != Q_d1, а на уровне шаблонов C++ отношения наследования ещё "не существует".
Вот пример решения на StackOverflow.
Abstraction вне форума Ответить с цитированием
Старый 11.04.2013, 16:15   #3
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 671
По умолчанию

Благодарю, вроде разобрался.
220Volt вне форума Ответить с цитированием
Старый 11.04.2013, 17:35   #4
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 671
По умолчанию

Еще вопросик по теме
.........

Последний раз редактировалось 220Volt; 11.04.2013 в 17:45. Причина: Глупость сказал.
220Volt вне форума Ответить с цитированием
Старый 11.04.2013, 17:48   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
все толично, но что если Q шаблонный класс, возможно ли специализировать структуру S под любую специализацию Q?
Нет. Между двумя специализациями одного шаблона, насколько помню, язык не обеспечивает ровным счётом никакой связи, Вам нужно обеспечить её самостоятельно.

Только в Вашем примере не специализации Q, а наследники специализаций, так что проблема решается наследованием Q от класса Q_base.
Abstraction вне форума Ответить с цитированием
Старый 11.04.2013, 18:03   #6
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 671
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
...
Только в Вашем примере не специализации Q, а наследники специализаций, так что проблема решается наследованием Q от класса Q_base.
Точно, как-то не догадался, еще раз спасибо.
220Volt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение ссылки на функцию из класса шаблона и передача ее как параметр шаблона pror0ck Общие вопросы C/C++ 7 17.06.2012 15:06
Использование файлов XLS в качестве шаблона и отображение этого шаблона в приложении Delphi? vodyara Общие вопросы Delphi 0 23.04.2012 13:13
шаблонные методы шаблона. Специализация. _Bers Общие вопросы C/C++ 5 08.02.2012 01:38
Специализация шаблона Bubaleh Общие вопросы C/C++ 6 09.09.2011 12:01
C++ Специализация шаблона opensuse2008 Помощь студентам 7 07.06.2009 18:00