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

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

Восстановить пароль Регистрация
 
VisualNIK
 Аватар для VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
18.03.2014, 13:42     Возможно ли шаблонную функцию продекларировать в заголовочном файле #1
Возможно ли шаблонную функцию продекларировать в заголовочном файле .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     Возможно ли шаблонную функцию продекларировать в заголовочном файле
Посмотрите здесь:

Дружественные методы в заголовочном и релизационном файле C++
C++ Переменная в заголовочном файле
C++ функции в заголовочном файле
C++ Объявление класса в заголовочном файле
C++ Как подключить библиотеки в заголовочном файле?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
18.03.2014, 13:49     Возможно ли шаблонную функцию продекларировать в заголовочном файле #2
nvdrossii, а почему нет? Продекларировать так же как и любую функцию, потом заинклудить в cpp файл и будет все летать.
VisualNIK
 Аватар для 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
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.03.2014, 14:01     Возможно ли шаблонную функцию продекларировать в заголовочном файле #4
nvdrossii,
1. На всякий: экспорт шаблонов не поддерживается - и объявление и определение должны быть в одном файле.
2. Конкретные типы? См синтаксис специализации шаблона. А если уж пишете шаблон, то точно уверены, что вам нужно явно специализировать его?
VisualNIK
 Аватар для 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
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.03.2014, 16:52     Возможно ли шаблонную функцию продекларировать в заголовочном файле #6
Много слов, мало кода... Проблемы-то остались?
Шаблоны можно спокойно писать полностью в заголовочном файле.
VisualNIK
 Аватар для VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
18.03.2014, 17:25  [ТС]     Возможно ли шаблонную функцию продекларировать в заголовочном файле #7
0x10, да нет проблеммы нету сейчас, просто cpp файл с ними подцепляю куда нужно, да про заголовочный до этого ещё просек, но потом обратил внимание на то, что в заголовочных обычно только прототипы функций пишут, а реализацию в cpp. Мол так и задуманно и прочее и прочее. вот и решил потыркаться, если так можно выразиться...рабочие варианты моей глобальной задачи были изначально,
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
18.03.2014, 20:04     Возможно ли шаблонную функцию продекларировать в заголовочном файле #8
Цитата Сообщение от nvdrossii Посмотреть сообщение
в них в отличие от функций переменные типа классов T1,T2, объявленных так же ранее...по сути кто знает что там за классы?? в отличии от типов int, string и других типов, которые согласуются с любой точки программы...я правильно понял?
Ну почти. Вся соль в том, что тело шаблона должно быть доступно в точке, где подставляются реальные типы (это называется инстанцирование). Файлы в С++ компилируются отдельно, и файл а.cpp не знает что находится в b.cpp на этапе компиляции. Поэтому тело шаблона помещенное в один cpp не может быть "распознано" при использовании в другом cpp. Отсюда рекомендация писать шаблоны в заголовочных файлах.
Раньше была еще такая фича - экспорт шаблонов. За все время ее существования в стандарте языка, ее умудрились реализовать только ребята из Comeau Computing, да и то на базе наработок EDG (их компилятор до недавнего времени был известен как один из наиболее полно соответствующих стандарту). В общем суть этой фичи заключалась в том, что генерились специальный файлы, в которых содержалась необходимая информация о таких шаблонах.
Однако на сегодняшний момент, эта возможность исключена из стандарта вследствие своей невостребованности пользователями и сложности реализации в компиляторе.
VisualNIK
 Аватар для 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++
Можно ли объявлять объекты в заголовочном файле? C++
C++ Сортировка пузырьком функцией в заголовочном файле

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

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

Текущее время: 04:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru