информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медГде водятся OGRыСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
(кстати, вопрос вполне годится на занесение в FAQ) 04.05.03 12:23  Число просмотров: 1078
Автор: Ultra Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> В момент инстанцирования компилятору должно быть известно
> тело шаблонной функции. Это обычно достигается либо всякими
> хитрыми опциями (помнится, когда-то у Борланда можно было
> скомпилить 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