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

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

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

Как использовать шаблонную функцию в другой единице трансляции? - C++

11.01.2014, 14:14. Просмотров 286. Ответов 3
Метки нет (Все метки)

Как исправить ошибку? Спрашиваем у однокурсников и никто не знает((

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
file1.cpp
 
 
 
export template<typename T>
T twice(T t)
{
    return t+1;
}
 
file2.cpp
 
template<typename T>
T twice(T t);
 
int g(int i)
{
    return twice(i);
}
Добавлено через 2 минуты
Для обычной функции это легко делается а вот как тоже самое сделать но только для шаблонной?

Добавлено через 10 минут
/\ up /\
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2014, 14:14     Как использовать шаблонную функцию в другой единице трансляции?
Посмотрите здесь:

Как построить шаблонную функцию? - C++
Добрый вечер! Есть код, который всегда повторяется в дочерних классах: QPushButton *button = new QPushButton(QIcon(&quot;:/icons/&quot; + icon +...

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

Написать шаблонную функцию - C++
Здравстсвуйте,нужно переделать функцию под шаблонную.Я вроде как сделал,но компилятор ругается.Работаю в Rad Xe2. Вот код #pragma...

Std::function на шаблонную функцию - C++
Здравствуйте :) Делаю такую вещь: template &lt;typename T1, typename T2&gt; typename std::common_type&lt;T1,T2&gt;::type func(T1 val1, T2 val2) ...

Написать шаблонную функцию, сортирующую стек - C++
Как мне сделать чтобы я мог вводить значения любого типа? Писал что то типа: template&lt;typename stack&gt; но эт не верно. С шаблонами...

Можно ли упростить шаблонную функцию сортровки - C++
Есть шаблонная функция, сортирующая пузырьком по возрастанию или убыванию в зависимости от полученного параметра. Но она выглядит громоздко...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.01.2014, 14:18     Как использовать шаблонную функцию в другой единице трансляции? #2
экспорт шаблонов - вещь не объезженная.
я вот не скажу чего там и как, ни разу не приходилось использовать.
но, как водится, предлагаю вам обсудить альтернативы
вам дейстиветльно нужен экспорт? какую задачу вы пытаетесь решить с его использованием?
export
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 2
11.01.2014, 14:32  [ТС]     Как использовать шаблонную функцию в другой единице трансляции? #3
Альтернативы есть. Можно эту шаблонную функцию поместить в заголовочный файл и потом подключить его.
Но у Страуструпа написано именно так. Эта функция находится в file.cpp
C++
1
2
3
4
5
export template<typename T>
T twice(T t)
{
    return t+1;
}
А в файле file2.cpp можно ее использовать
file2.cpp

C++
1
2
3
4
5
6
7
template<typename T>
T twice(T t);
 
int g(int i)
{
    return twice(i);
}
Но визуал студио показывает ошибку. Вот и хотим понять в чем ошибка.

Добавлено через 1 минуту
Задача пока только одна. Чтобы программа скомпилировалась))

Добавлено через 4 минуты
DU пусть все так остается. Поместим эту функцию в отдельный заголовочный файл и все. Вроде работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2014, 17:03     Как использовать шаблонную функцию в другой единице трансляции?
Еще ссылки по теме:

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

Передать код под шаблонную функцию - C++
Ребят помоги передать код под одну шаблонную функцию У меня сделано через перезагрузку функции Сам код: #pragma hdrstop #pragma...

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

Передача массива в шаблонную функцию, найти ошибку - C++
#include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; template&lt;class T&gt; void init_mas(T &amp;mas, int n, int m) {srand(...


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

Или воспользуйтесь поиском по форуму:
some_name
Вежливость-главное оружие
221 / 221 / 55
Регистрация: 19.02.2013
Сообщений: 1,431
11.01.2014, 17:03     Как использовать шаблонную функцию в другой единице трансляции? #4
export убрали из с + + standart. Не используйте его.
export темплейтов ДЕПРЕЦИРОВАН, он был реализован только в одном компиляторе и то криво.

Можно так сделать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// file1.h
 
template <class T> class Math
{
public:
    static T max(T const, T const);
};
 
// file1.cpp
#include "stdafx.h"
#include <iostream>
#include "file1.h"
 
template Math<int>; 
template Math<double>;
template<class T> T Math<T>::max(T const a, T const b)
{
    return a > b ? a : b;
};
 
 
void main() 
{
    std::cout<<Math<int>::max(2, 3)<<std::endl;
    std::cout<<Math<int>::max(12.7, 3.1)<<std::endl;
    getchar();
    getchar();
}
Yandex
Объявления
11.01.2014, 17:03     Как использовать шаблонную функцию в другой единице трансляции?
Ответ Создать тему
Опции темы

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