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

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

Войти
Регистрация
Восстановить пароль
 
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
#1

Зачем нужен шаблон как параметр шаблона? - C++

25.04.2013, 15:38. Просмотров 577. Ответов 5
Метки нет (Все метки)

Видел много примеров, но что-то не особо понятно зачем и как это работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2013, 15:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зачем нужен шаблон как параметр шаблона? (C++):

Шаблон параметр шаблона и наследование - C++
Есть вот такой базовый класс, который описывает абстрактный доступ к контейнеру stl: template< template<typename, typename> class...

зачем нужен параметр - C++
#include"otobrazenie.h" #include "primary.h" #include <iostream> #include "execution.h" #include"output.h" #include"input.h" ...

Почему шаблонный параметр-шаблон не принимает другие параметры шаблона - C++
Т.е. нельзя вместо template <typename T, template <typename _Ty, class _Aloc = allocator<_Ty> > class CONT = vector> class...

Передача функции как параметр шаблона - C++
Хочу передавать в шаблон любую функцию без параметров и вызывать ее из него. Как это сделать? Не работает, но примерно так должно...

Свой тип как параметр шаблона - C++
Есть вопрос по коду: #include <iostream> #include <memory> #include <vector> using namespace std; template<class T> class...

Указатель на статический массив как параметр шаблона - C++
Добрый день. Необходимо параметр шаблона сделать указателем и передавать в него указатель на статический массив: template<size_t...

5
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.04.2013, 16:57 #2
Цитата Сообщение от mzarb Посмотреть сообщение
но что-то не особо понятно зачем
Чтобы передавать шаблоны в качестве параметров, но при этом не указывать параметры этих шаблонов, другими словами - обязать параметры шаблона быть шаблонами, но при этом не указывать параметры параметров шаблона
В качестве примера - шаблон класса, параметром которого может может быть только шаблон принимающий два параметра.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <vector>
#include <deque>
#include <list>
 
template<template<class T, class A = std::allocator<T> > class Cont>
class MyClass
{
    Cont<int> mCont;
};
 
template<class T, class R>
class TestClass
{
};
 
int main()
{
    MyClass<std::vector> obj_vec;
    MyClass<std::list> obj_list;
    MyClass<std::deque> obj_deque;
    MyClass<TestClass> obj_test;
}
Как видишь в main задается лишь контейнер, тогда как тип элемента контейнера задаем внутри, хотя если нам это потребуется то мы можем сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <vector>
#include <deque>
#include <list>
 
template<class T, template<class, class A = std::allocator<T> > class Cont>
class MyClass
{
    Cont<T> mCont;
};
 
template<class T, class R>
class TestClass
{
};
 
int main()
{
    MyClass<int, std::vector> obj_vec;
    MyClass<int, std::list> obj_list;
    MyClass<int, std::deque> obj_deque;
    MyClass<int, TestClass> obj_test;
}
1
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
02.05.2013, 16:43  [ТС] #3
Jupiter, так а за что цепляется к примеру vector, когда его передать этим кодом "MyClass<int, std::vector> obj_vec;"? Так-то понятно, что его примет этот код "template<class T, class A = std::allocator<T> > class Cont" и Cont будет как аллиас вектора, но какая именно часть этого кода примет вектор? Ведь он же должен за что-то зацепится. Вообщем это аналог указателя на функцию?
0
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.05.2013, 16:47 #4
что значит зацепится?
Цитата Сообщение от mzarb Посмотреть сообщение
Вообщем это аналог указателя на функцию?
вообще другое
1
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
02.05.2013, 16:56  [ТС] #5
Ну вот передал аргументом вектор и его принял шаблонный параметр шаблона, но куда он его дел? Ведь эта часть "class T, class A = std::allocator<T> " параметры вектора, а где делся сам вектор, кто его принял? То есть Cont будет указывать на реализацию вектора?
0
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.05.2013, 17:00 #6
Цитата Сообщение от mzarb Посмотреть сообщение
То есть Cont будет указывать на реализацию вектора?
да.
1
02.05.2013, 17:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 17:00
Привет! Вот еще темы с ответами:

Как можно изменить параметр шаблона (template)? - C++
есть такие классы: class abstract { public: virtual int method() = 0; // Допустим }; class A: public abstract {

Результат работы функции как параметр шаблона - C++
В старом с++ билдере такое работало, новый clang ругается. template &lt;class T, const IID* piid = &amp;__uuidof(T)&gt; class CComQIPtr { .. ...

Передать шаблонный класс, как параметр шаблона - C++
нужно не используя stl написать аналог класса list. написал болванку и застрял template&lt;class C&gt; class node{ protected: C *_next; ...

Кортеж с абстрактным типом как параметр шаблона + smart_ptr - C++
Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон класса, экземпляров кортежа нигде не создаём. Создаём экземпляры...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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