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

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

Войти
Регистрация
Восстановить пароль
 
VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
#1

Возможно ли шаблонную функцию продекларировать в заголовочном файле - C++

18.03.2014, 13:42. Просмотров 442. Ответов 9
Метки нет (Все метки)

Возможно ли шаблонную функцию продекларировать в заголовочном файле .h??? Если да, то как это сделать??? Спасибо! Буду признателен

Например вот есть фукцния:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <class T1 , class T2> bool go_up_sequence(T1 *M, T2 s)
{
    bool flag = false;
    
    if(M[0] < M[1])
    {
        flag = true;
 
        for(int k = 2; k < s; k++)
        {
            if(M[k-1] >= M[k])
            {
                flag = false;
                break;
            }
        }
    }
 
    return flag;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 13:42     Возможно ли шаблонную функцию продекларировать в заголовочном файле
Посмотрите здесь:

Описать шаблонную функцию в cpp-файле - C++
файл h template &lt; class T &gt; class B_tree { private: struct T_node { friend class B_tree; T val;

Передача указателя на шаблонную функцию в другую функцию - C++
Пишу тест для нескольких улучшений квиксорта с измерением времени. Функция benchmark принимает итераторы для диапазона элементов, указатель...

Объявление класса в заголовочном файле - C++
Здравствуйте. Столкнулся с тем что нужно скомпилировать библиотеку для C++. классы написал, библиотеку скомпилировал. осталось только...

Не подключается namespace в заголовочном файле - C++
Всем доброго дня. Ситуация такая: common.h #pragma once namespace CommonSystem { class Device {

Сортировка пузырьком функцией в заголовочном файле - C++
Как ясно из названия — не могу разобраться как сделать сортировку пузырьком в заголовочном файле. Это должна быть функция или процедура?

Можно ли объявлять объекты в заголовочном файле? - C++
main.cpp #include &quot;aa.h&quot; int main(int argc, char** argv){ return 0; } aa.h #ifndef e2_H_ #define e2_H_ int a=0; #endif...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
18.03.2014, 13:49     Возможно ли шаблонную функцию продекларировать в заголовочном файле #2
nvdrossii, а почему нет? Продекларировать так же как и любую функцию, потом заинклудить в cpp файл и будет все летать.
VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
18.03.2014, 13:56  [ТС]     Возможно ли шаблонную функцию продекларировать в заголовочном файле #3
dimcoder, а как это сделать конкретно в этом примере? функцию декларирую просто
C++
1
int reverse_number(int num)
например. В моем случае с шаблонной ф. вставляю весь заголовок пишет ошибку о ссылке на неразрешенный символ, пробую оставлять только
C++
1
bool go_up_sequence(int *M, int s)
как видно с указанием конкретных типов уже...таже ошибка...помоему
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
18.03.2014, 14:01     Возможно ли шаблонную функцию продекларировать в заголовочном файле #4
nvdrossii,
1. На всякий: экспорт шаблонов не поддерживается - и объявление и определение должны быть в одном файле.
2. Конкретные типы? См синтаксис специализации шаблона. А если уж пишете шаблон, то точно уверены, что вам нужно явно специализировать его?
VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
18.03.2014, 16:47  [ТС]     Возможно ли шаблонную функцию продекларировать в заголовочном файле #5
0x10, воооот, это уже вариант, я тоже к этому склонялся и подозрение падало на то, что, в них в отличие от функций переменные типа классов T1,T2, объявленных так же ранее...по сути кто знает что там за классы?? в отличии от типов int, string и других типов, которые согласуются с любой точки программы...я правильно понял?

Добавлено через 2 часа 42 минуты
0x10, я хотел продекларировать в h файле эту функцию, так как она используется двумя другими, которые посылают в нее разного типа две матрицы, одна - int, другая - float. мне показалось, что использовать перегрузку нет необходимости, так как тело функции для обоих матриц одинаково, вот решил сделать шаблонную функцию, которой по барабану какого типа там пришли значения (по крайней мере в моём случае), но: так как не сработало декларирование в h файле, приходится к cpp, чьи функции используют эти шаблоны, подкрепить cpp собственно с этой шаблонной функцией...
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
18.03.2014, 16:52     Возможно ли шаблонную функцию продекларировать в заголовочном файле #6
Много слов, мало кода... Проблемы-то остались?
Шаблоны можно спокойно писать полностью в заголовочном файле.
VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
18.03.2014, 17:25  [ТС]     Возможно ли шаблонную функцию продекларировать в заголовочном файле #7
0x10, да нет проблеммы нету сейчас, просто cpp файл с ними подцепляю куда нужно, да про заголовочный до этого ещё просек, но потом обратил внимание на то, что в заголовочных обычно только прототипы функций пишут, а реализацию в cpp. Мол так и задуманно и прочее и прочее. вот и решил потыркаться, если так можно выразиться...рабочие варианты моей глобальной задачи были изначально,
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
18.03.2014, 20:04     Возможно ли шаблонную функцию продекларировать в заголовочном файле #8
Цитата Сообщение от nvdrossii Посмотреть сообщение
в них в отличие от функций переменные типа классов T1,T2, объявленных так же ранее...по сути кто знает что там за классы?? в отличии от типов int, string и других типов, которые согласуются с любой точки программы...я правильно понял?
Ну почти. Вся соль в том, что тело шаблона должно быть доступно в точке, где подставляются реальные типы (это называется инстанцирование). Файлы в С++ компилируются отдельно, и файл а.cpp не знает что находится в b.cpp на этапе компиляции. Поэтому тело шаблона помещенное в один cpp не может быть "распознано" при использовании в другом cpp. Отсюда рекомендация писать шаблоны в заголовочных файлах.
Раньше была еще такая фича - экспорт шаблонов. За все время ее существования в стандарте языка, ее умудрились реализовать только ребята из Comeau Computing, да и то на базе наработок EDG (их компилятор до недавнего времени был известен как один из наиболее полно соответствующих стандарту). В общем суть этой фичи заключалась в том, что генерились специальный файлы, в которых содержалась необходимая информация о таких шаблонах.
Однако на сегодняшний момент, эта возможность исключена из стандарта вследствие своей невостребованности пользователями и сложности реализации в компиляторе.
VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
19.03.2014, 07:17  [ТС]     Возможно ли шаблонную функцию продекларировать в заголовочном файле #9
Цитата Сообщение от DrOffset Посмотреть сообщение
Отсюда рекомендация писать шаблоны в заголовочных файлах.
ну вот благодарю! хотя и любую информацию требуется проверять, это уже конкретика...хорошие книги прочитать время пока нету просто, но все ж ответы на вопросы ищу и кое-что хоть и так находится, спасибо! значит я правильно делал, когда пихал их в заголовочный файл...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2014, 17:53     Возможно ли шаблонную функцию продекларировать в заголовочном файле
Еще ссылки по теме:

Дружественные методы в заголовочном и релизационном файле - C++
Доброго времени суток. Есть такая проблема: В заголовочном файле lsf.h описываю класс и перегружаю &quot;&lt;&lt;&quot; &quot;&gt;&gt;&quot; для работы с классом. ...

Можно ли объявлять объекты в заголовочном файле? - C++
Решил написать змейку с использование OpenGL. Сначала написал все в одном файле, все работало, решил сделать по красивее и распихать по...

Как подключить библиотеки в заголовочном файле? - C++
Для работы заголовочного файла (&quot;russianletters.h&quot;) необходимо дополнительно подключить библиотеки stdio.h и windows.h. В результате...

Объявление поля класса в заголовочном файле - C++
Здравствуйте! Подскажите пожалуйста, как сделать правильно. Есть класс А и класс B, в классе B должно быть поле в виде массива классов А....


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

Или воспользуйтесь поиском по форуму:
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
19.03.2014, 17:53     Возможно ли шаблонную функцию продекларировать в заголовочном файле #10
Цитата Сообщение от nvdrossii Посмотреть сообщение
хотя и любую информацию требуется проверять
Очень советую информацию проверять в стандарте Я бы мог конечно сразу тебя туда послать, но мне показалось, что в этой ситуации лучше объяснить.
Yandex
Объявления
19.03.2014, 17:53     Возможно ли шаблонную функцию продекларировать в заголовочном файле
Ответ Создать тему
Опции темы

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