Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
(кстати, вопрос вполне годится на занесение в FAQ) 01.05.03 21:32 Число просмотров: 1108
Автор: dl <Dmitry Leonov>
|
В момент инстанцирования компилятору должно быть известно тело шаблонной функции. Это обычно достигается либо всякими хитрыми опциями (помнится, когда-то у Борланда можно было скомпилить cpp-файл с телом шаблона с одним ключом, а все остальные файлы, его использующие, с другим), либо (наиболее популярный вариант) включением тела шаблонных функций и реализаций шаблонных классов в хедеры.
|
<programming>
|
[C++] Шаблонный функции 01.05.03 21:16
Автор: Ultra Статус: Незарегистрированный пользователь
|
Люди, я чего-то не доганяю.
Пишу код
--- typetostr.h ---
#ifndef __TYPETOSTR_H
#define __TYPETPSTR_H
template <class T>
char *TypeToStr(T Value);
#endif
--- typetostr.h ---
--- typetostr.cpp ---
#include "typetostr.h"
#include <strstream.h>
template <class T>
char* TypeToStr<T>(T Value)
{
strstream s;
s << Value;
return s.str();
}
--- typetostr.cpp ---
получаю в ответ еррор.
Если-же пишу
--- typetostr.h ---
#ifndef __TYPETOSTR_H
#define __TYPETOSTR_H
template <class T>
char* TypeToStr<T>(T Value)
{
strstream s;
s << Value;
return s.str();
}
#endif
--- typetostr.h ---
то все работает, чем это вызвано, и как это поправить ???
|
 |
(кстати, вопрос вполне годится на занесение в FAQ) 01.05.03 21:32
Автор: dl <Dmitry Leonov>
|
В момент инстанцирования компилятору должно быть известно тело шаблонной функции. Это обычно достигается либо всякими хитрыми опциями (помнится, когда-то у Борланда можно было скомпилить cpp-файл с телом шаблона с одним ключом, а все остальные файлы, его использующие, с другим), либо (наиболее популярный вариант) включением тела шаблонных функций и реализаций шаблонных классов в хедеры.
|
 |  |
(кстати, вопрос вполне годится на занесение в FAQ) 04.05.03 12:23
Автор: Ultra Статус: Незарегистрированный пользователь
|
> В момент инстанцирования компилятору должно быть известно > тело шаблонной функции. Это обычно достигается либо всякими > хитрыми опциями (помнится, когда-то у Борланда можно было > скомпилить cpp-файл с телом шаблона с одним ключом, а все > остальные файлы, его использующие, с другим), либо > (наиболее популярный вариант) включением тела шаблонных > функций и реализаций шаблонных классов в хедеры. Открыл я свой старый, потрепаный справочник, и ничего в нем не нашел =(((, Потом написал сюда, похоже, что то-же =(((
|
 |  |  |
Дык вроде ответили 04.05.03 13:54
Автор: amirul <Serge> Статус: The Elderman
|
> > (наиболее популярный вариант) включением тела > шаблонных > > функций и реализаций шаблонных классов в хедеры. > Открыл я свой старый, потрепаный справочник, и ничего в нем > не нашел =(((, Потом написал сюда, похоже, что то-же =((( Самая распространненная техника работы с шаблонами - включение тела шаблона в хедер (при этом он должен быть защищен от повторного включения). Скажем, весь STL так реализован, а его разработчики крепко подумали перед тем, как писать.
В общем, просто используй второй вариант (с хедером) и все.
ЗЫ: Если хочешь узнать на что конкретно матерится компилятор, то неплохо было бы запостить хотя бы коды ошибок, которые он выдает. Хотя скорее всего дело в том что компилятору нечего компилировать в cpp-шнике, т.к. нет ни одного использования (инстанцирования) этого шаблона.
|
 |  |  |
[C++] А ты уверен, что оно тебе надо? 04.05.03 12:28
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
Честно говоря, я использую шаблонные функции только как встраиваемые. Уж больно код хорошо распухает от них.
|
 |  |
Есть еще хитрое слово export 03.05.03 19:05
Автор: amirul <Serge> Статус: The Elderman
|
> В момент инстанцирования компилятору должно быть известно > тело шаблонной функции. Это обычно достигается либо всякими > хитрыми опциями (помнится, когда-то у Борланда можно было > скомпилить cpp-файл с телом шаблона с одним ключом, а все > остальные файлы, его использующие, с другим), либо > (наиболее популярный вариант) включением тела шаблонных > функций и реализаций шаблонных классов в хедеры. Стандарт ISO/IEC для ЦПП содержит ключевое слово export для экспортирования шаблонов. Вот только я не знаю ни одного компилятора, который поддерживает стандарт в этом отношении :-)
|
 |  |  |
Есть еще хитрое слово export 04.05.03 12:07
Автор: Ultra Статус: Незарегистрированный пользователь
|
> Стандарт ISO/IEC для ЦПП содержит ключевое слово export для > экспортирования шаблонов. Вот только я не знаю ни одного > компилятора, который поддерживает стандарт в этом отношении > :-) 5 балов за содержательность =)))
|
 |  |
Годится 03.05.03 14:35
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
|
 |  |
(кстати, вопрос вполне годится на занесение в FAQ) 02.05.03 19:36
Автор: Ultra Статус: Незарегистрированный пользователь
|
> В момент инстанцирования компилятору должно быть известно > тело шаблонной функции. Это обычно достигается либо всякими > хитрыми опциями (помнится, когда-то у Борланда можно было > скомпилить cpp-файл с телом шаблона с одним ключом, а все > остальные файлы, его использующие, с другим), либо > (наиболее популярный вариант) включением тела шаблонных > функций и реализаций шаблонных классов в хедеры. А у gcc (точнее g++) такие ключи есть???
|
|
|