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

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

Войти
Регистрация
Восстановить пароль
 
ohos
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 9
#1

Что за пустые шаблоны template <> struct/inline? - C++

06.07.2014, 16:11. Просмотров 887. Ответов 4
Метки нет (Все метки)

что за пустые шаблоны template <> за которыми следуют class/struct/inline?

По многочисленным источникам в c++ шаблоны имеют вид, цитата с википедии:

Шаблон функции начинается с ключевого слова template, за которым в угловых скобках следует список параметров. Затем следует объявление функции:

C++
1
2
template< typename T > 
void sort( T array[], int size );  // прототип: шаблон sort объявлен, но не определён

однако недавно встретил запись вида

C++
1
2
3
4
5
6
7
8
9
10
11
// if we don't have a held type, return the destructor of the raw type
        template<>
        struct internal_const_holder_destructor<detail::null_type>
        {
            typedef void(*destructor_t)(void*);
            template<class T>
            static destructor_t apply(detail::type_<T>)
            {
                return 0;
            }
        };
притом запись template <> я не смог найти:

в интернете (полагаю гугл просто не ищет спец символы заключенные в кавычки типо "<>")
книге строуструпа за 2011 в djvu
на странице строуструпа http://www.stroustrup.com/

зато поиском по странице строуструпа нашел интересный файлик для его студентов

http://www.stroustrup.com/Programmin...b_facilities.h

где используется точно такой же способ записи

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifdef _MSC_VER
#include <hash_map>
using stdext::hash_map;
#else
#include <ext/hash_map>
using __gnu_cxx::hash_map;
 
namespace __gnu_cxx {
 
    template<> struct hash<std::string>
    {
        size_t operator()(const std::string& s) const
        {
            return hash<char*>()(s.c_str());
        }
    };
 
} // of namespace __gnu_cxx
#endif
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2014, 16:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что за пустые шаблоны template <> struct/inline? (C++):

Шаблоны template с ограниченными параметрами - C++
Привет всем. У меня короткий вопрос. например есть такой код: template &lt;class T&gt; class MyVec { std::vector&lt;T&gt; m_vec; }; ...

Шаблоны типа template<class T*> - C++
Здравствуйте, объясните пожалуйста, что означает сия запись: template&lt;class T*&gt;. И означает ли она, что я далее смогу использовать только...

подскажите template<class> (Шаблоны и указатели) - C++
circl.h #ifndef _CIRCL_H #define _CIRCL_H template &lt;class t&gt; class circl{ private: circl *pNext,*pBack; public: t...

Объясните,почему шаблоны написаны через struct? - C++
Пришлось залезть в файл limits,обратил внимание,что все шаблоны написаны через struct.Можете объяснить,почему?В смысле почему не классы?В...

Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline? - C++
Здравствуйте. Знаю теорию, но не понимаю, на сколько должна быть маленькая функция, чтоб она подошла под inline ? Как...

Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier - C++
Решил подправить свой класс с использованием шаблонов, но столкнулся со следующим косяком. Если я прописываю тело функций внутри описания...

4
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.07.2014, 16:13 #2
Цитата Сообщение от ohos Посмотреть сообщение
что за пустые шаблоны template <>
Так начинается специализация шаблона для конкретного типа. Т.е. если тип предполагает особенную реализацию шаблона.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
06.07.2014, 16:14 #3
Специализация
0
DrOffset
7310 / 4406 / 998
Регистрация: 30.01.2014
Сообщений: 7,241
06.07.2014, 16:19 #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Так начинается специализация шаблона для конкретного типа.
Тут надо уточнить, что это полная специализация.
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.07.2014, 16:48 #5
DrOffset, разумное замечание. Однако упоминание "конкретного типа" как бы подразумевает, что в итоге будет "конкретный" же код, а не шаблонный.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2014, 16:48
Привет! Вот еще темы с ответами:

'MyQueue' : use of class template requires template argument list - C++
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки 'MyQueue' : use of class template...

inline-объясните что такое - C++
1.Перегрузка ф-ии-следует ли все функции перегрузить? 2.inline-объясните что такое 3.каким образом,если вызвать функции милионы...

Ошибка компиляции: template-id does not match any template declaration - C++
Здравствуйте. Помогите, пожалуйста: #include &lt;iostream&gt; using namespace std; template &lt;typename T&gt; T maxn(T*, const int*); ...

В чем различие template <typename T> от template <class T> ? - C++
Добрый день ! Заметил в новых книгах применение записи template &lt;typename T&gt; вместо template &lt;class T&gt; в чем же тогда фишка...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
06.07.2014, 16:48
Ответ Создать тему
Опции темы

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