информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяВсе любят медСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
 Microsoft Authenticator прекращает... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
(кстати, вопрос вполне годится на занесение в 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++) такие ключи есть???
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach