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

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

Восстановить пароль Регистрация
 
export
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 2
11.01.2014, 14:14     Как использовать шаблонную функцию в другой единице трансляции? #1
Как исправить ошибку? Спрашиваем у однокурсников и никто не знает((

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++
C++ Как прописать шаблонную функцию внутри шаблонного класса?
C++ Передача массива через указатель в шаблонную функцию
C++ Возможно ли шаблонную функцию продекларировать в заголовочном файле
Написать шаблонную функцию, принимающую три параметра и возвращающую их среднее арифметическое как float C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 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 пусть все так остается. Поместим эту функцию в отдельный заголовочный файл и все. Вроде работает.
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
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     Как использовать шаблонную функцию в другой единице трансляции?
Ответ Создать тему
Опции темы

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