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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
#1

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

27.07.2013, 23:20. Просмотров 1101. Ответов 19
Метки нет (Все метки)

начал разбираться с шаблонами. если есть структура, и одна функция именно с int должна работать по особенному, написать можно вот так.

C++ (Qt)
1
2
3
4
5
6
7
8
9
template <typename T>
struct A {
  ...
};
 
template <>
void A::func <int>(){
   ...
};
а если у меня структура вот такого плана

C++ (Qt)
1
2
3
4
template <typename T, int param>
struct A {
  ...
};
как мне написать специализацию шаблона функции для определенного типа (например int)?
спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2013, 23:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос специализация шаблона (C++):

Специализация шаблона - C++
Пытаюсь специализировать шаблон для типа float, но не получается. В чем проблема? Компилятор: 1&gt;TemplateArr.obj : error LNK2005:...

Специализация шаблона - C++
Привет, у меня есть вот такой шаблон дерева: template &lt;typename T = int&gt; class Tree{ struct TreeItem{ // элемент дерева ...

Специализация шаблона - C++
Здравствуйте! Задача: Создайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое...

Частичная специализация шаблона - C++
Доброго всем времени суток! Помогите разобраться в следующей ситуации. Есть шаблон класса #include &lt;iostream&gt; using...

Специализация шаблона класса - C++
Имеется задание: Создать свой шаблонный класс – динамический массив (myvector). Создать методы этого класса. Инстанцировать для своего...

Явная специализация шаблона - C++
Здравствуйте, подскажите, пожалуйста, почему не выполняется неявное приведение фактических параметров к формальным при вызове функции для...

19
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2013, 00:10 #2
Кликните здесь для просмотра всего текста

Не по теме:

не

Цитата Сообщение от no0ker Посмотреть сообщение
C++
1
2
3
4
template <>
void A::func <int>(){
...
};
а
C++
1
2
3
4
template <>
void A<int>::func() {
...
}



можно только так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template<class T, int N>
struct Foo
{
    void bar();
};
 
template<class T, int N>
void Foo<T, N>::bar()
{
 
}
 
template<int N>
struct Foo<int, N>
{
    void bar();
};
 
template<int N>
void Foo<int, N>::bar()
{
 
}
1
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
28.07.2013, 10:01  [ТС] #3
а в функции

C++ (Qt)
1
2
3
4
5
template<class T, int N>
void Foo<T, N>::bar()
{
 
}
можно ли проверять тип T? мол, если число - то вот так. если строка - то вот так. как это реализовать?
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2013, 14:16 #4
no0ker, делайте специализацию
1
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
28.07.2013, 21:51  [ТС] #5
у меня еще вот такой вопрос...
есть вот такой шаблон
template<class T, int N>
C++ (Qt)
1
2
3
4
struct Foo
{
    void bar();
};
и помимо функции void bar(); ведь есть еще много других функций.

мне нужно, чтобы только одна функция класса с int работала несколько иначе и напишу
C++ (Qt)
1
2
3
4
5
template<int N>
struct Foo<int, N>
{
    void bar();
};
а остальные функции? они будут "там"? то есть я описываю только "исключительный" случай с int?
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2013, 21:59 #6
no0ker, нет.

Добавлено через 18 секунд
Цитата Сообщение от no0ker Посмотреть сообщение
то есть я описываю только "исключительный" случай с int?
да.
1
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
28.07.2013, 22:26  [ТС] #7
то есть, допустим есть

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
template<class T, int N>
struct Foo
{
    void bar();
    void abb();
};
 
template<class T, int N>
void Foo<T, N>::bar()
{
 
}


C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
template<int N>
struct Foo<int, N>
{
    void bar();
    // void abb(); нужно ли ее сюда писать?
};
 
template<int N>
void Foo<int, N>::bar()
{
 
}
могу ли я обратиться вот так?

C++ (Qt)
1
2
foo<int, 1> test;
test.abb() // можно ли вызывать функцию abb из специализированного класса?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
28.07.2013, 22:34 #8
no0ker, Нужно. Если в специализации данной функции нет - вызвать ее нельзя.
1
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
28.07.2013, 22:48  [ТС] #9
тогда если у меня есть 30 функций в классе, допустим. и только одну нужно подправить для int. получается что все 30 функций я просто копи-пастю, а только 1 немножко переписываю? =( это как то.. нерационально получается что ли... неужели нет другого способа? =(
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
28.07.2013, 22:49 #10
no0ker, Есть. И не один.
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
28.07.2013, 22:53  [ТС] #11
а поподробнее можно? =)
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
29.07.2013, 00:08 #12
no0ker, можно общий функционал вынести в базовый класс, примерно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<typename T, int param>
struct FooBase {
 
   void abb() { /* ... */ }
};
 
template<typename T, int param>
struct Foo : FooBase<T, param> {
 
   void foo() { /* ... */ }
};
 
template<int param>
struct Foo<int, param> : FooBase<int, param> {
 
   void foo() { /* ... */ }
};
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
29.07.2013, 02:49 #13
Цитата Сообщение от no0ker Посмотреть сообщение
можно ли проверять тип T? мол, если число - то вот так. если строка - то вот так. как это реализовать?
Просто перегрузи функцию void F(string); и void F(int);
1
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
11.08.2013, 17:26  [ТС] #14
начал писать, но вот этот код категорически не компилится

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T, int L>
struct parent{
public:
    void test(void){
        std::cout << "parent -> " << L << "\n";
    }
};
 
template<int L>
struct child <int, L> :  parent <int, L>{
    
};
мол, синтаксическая ошибка. подскажите как поправить, пожалуйста.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
11.08.2013, 17:27 #15
no0ker, Что сделать-то хотите? У вас нет специализации.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2013, 17:27
Привет! Вот еще темы с ответами:

Явная специализация шаблона - C++
Здравствуйте. Не совсем разобрася с сабжем. Например, если есть кусочек кода: template &lt;typename T&gt; void func(T &amp;blue, T &amp;red); ...

Явная специализация шаблона - C++
Столкнулся с проблемой при изучении шаблонов. Задача: написать шаблонную функцию, которая принимает в качестве аргумента массив...

Специализация операции шаблона - C++
Доброго времени суток. Имеется шаблон: template&lt;class Type&gt;class Figures { /*...*/ public: /*...*/ void...

Специализация шаблона функции - C++
Как сделать специализированную функцию шаблон на тип int? У меня что-то не получается ..


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
11.08.2013, 17:27
Ответ Создать тему
Опции темы

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