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

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

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

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

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

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 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;
}
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 будет как аллиас вектора, но какая именно часть этого кода примет вектор? Ведь он же должен за что-то зацепится. Вообщем это аналог указателя на функцию?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.05.2013, 16:47     Зачем нужен шаблон как параметр шаблона? #4
что значит зацепится?
Цитата Сообщение от mzarb Посмотреть сообщение
Вообщем это аналог указателя на функцию?
вообще другое
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
02.05.2013, 16:56  [ТС]     Зачем нужен шаблон как параметр шаблона? #5
Ну вот передал аргументом вектор и его принял шаблонный параметр шаблона, но куда он его дел? Ведь эта часть "class T, class A = std::allocator<T> " параметры вектора, а где делся сам вектор, кто его принял? То есть Cont будет указывать на реализацию вектора?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 17:00     Зачем нужен шаблон как параметр шаблона?
Еще ссылки по теме:

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

Ссылка как параметр шаблона. Что это значит? - C++
Увидел в данной теме http://www.cyberforum.ru/cpp-beginners/thread1900008.html что шаблонный тип можно указать как ссылку. Судя по тесту...

Параметр шаблона класса как собственный тип данных - C++
Приветствую. Такой вопрос: как перегрузить операторы класса-шаблона, где в качестве аргумента шаблона выступает собственный тип данных....

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


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.05.2013, 17:00     Зачем нужен шаблон как параметр шаблона? #6
Цитата Сообщение от mzarb Посмотреть сообщение
То есть Cont будет указывать на реализацию вектора?
да.
Yandex
Объявления
02.05.2013, 17:00     Зачем нужен шаблон как параметр шаблона?
Ответ Создать тему
Опции темы

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