Как использовать тип из шаблона в другом файле?
От: Аноним  
Дата: 04.11.04 11:20
Оценка:
Корявый вопрос
Допустим есть некий .h файл в котором определен класс А

template <typename T> class A
{
...
    void fn(T value);
}



Хотелось бы реализацию функции fn видеть в .cpp файле, но компилятор не признает тип Т.
Как его надо описывать?
Re: Как использовать тип из шаблона в другом файле?
От: Glоbus Украина  
Дата: 04.11.04 11:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Корявый вопрос

А>Допустим есть некий .h файл в котором определен класс А

А>
А>template <typename T> class A
А>{
А>...
А>    void fn(T value);
А>}
А>



А>Хотелось бы реализацию функции fn видеть в .cpp файле, но компилятор не признает тип Т.

А>Как его надо описывать?

Зависит от компилера — позволяет ли он это. Есть такой волшебное слово export которое по идее должно это позволять, но в VS такое например не прокатывает. Так что придется оставить реализацию в ашнике, хотя вандевурд в "Щаблонах С++" приводит остроумный способ как разделить объявление и реализацию шаблонов
Пишем объявление
//A.h
template<class T>
class A
{
    void fn( T value );
}

//A.hpp
template<class T>
void A<T>::fn(T value)
{
  //реализация
}


И везде пользуем A.hpp.
Удачи тебе, браток!
Re: Как использовать тип из шаблона в другом файле?
От: LaptevVV Россия  
Дата: 04.11.04 11:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Корявый вопрос

А>Допустим есть некий .h файл в котором определен класс А

А>
А>template <typename T> class A
А>{
А>...
А>    void fn(T value);
А>}
А>



А>Хотелось бы реализацию функции fn видеть в .cpp файле, но компилятор не признает тип Т.

А>Как его надо описывать?
АГА!!!!! См. на сайте Q&A — Шаблоны и модули
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Как использовать тип из шаблона в другом файле?
От: Glоbus Украина  
Дата: 04.11.04 11:26
Оценка:
Пардон, маленькое исправленице
G>Пишем объявление
G>
G>//A.h
G>template<class T>
G>class A
G>{
G>    void fn( T value );
G>}

G>//A.hpp
  #include "A.h"
G>template<class T>
G>void A<T>::fn(T value)
G>{
G>  //реализация
G>}
G>


G>И везде пользуем A.hpp.
Удачи тебе, браток!
Re: Как использовать тип из шаблона в другом файле?
От: ilnar Россия  
Дата: 04.11.04 11:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Корявый вопрос

А>Допустим есть некий .h файл в котором определен класс А

А>
А>template <typename T> class A
А>{
А>...
А>    void fn(T value);
А>}
А>



А>Хотелось бы реализацию функции fn видеть в .cpp файле, но компилятор не признает тип Т.

А>Как его надо описывать?

а ты написал там так? :
template <typename T> 
void A::fn(T value)
{
...
}
Re: Как использовать тип из шаблона в другом файле?
От: Анатолий Широков СССР  
Дата: 04.11.04 11:54
Оценка:
А вопрос можно? Спасибо. А у Вас никогда не возникало желание запихнуть в файл реализации (cpp) определение макроса?
Re[2]: Как использовать тип из шаблона в другом файле?
От: Аноним  
Дата: 04.11.04 12:30
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>А вопрос можно? Спасибо. А у Вас никогда не возникало желание запихнуть в файл реализации (cpp) определение макроса?


Запихивал. А что это плохо?
Re[3]: Как использовать тип из шаблона в другом файле?
От: Анатолий Широков СССР  
Дата: 04.11.04 12:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Анатолий Широков, Вы писали:


АШ>>А вопрос можно? Спасибо. А у Вас никогда не возникало желание запихнуть в файл реализации (cpp) определение макроса?


А>Запихивал. А что это плохо?


Ничем, а это определение Вы молги использовать в другой модуле (cpp)? Предвижу, что нет. А почему тогда от шаблонов Вы хотите тогоже?
Re[4]: Как использовать тип из шаблона в другом файле?
От: Аноним  
Дата: 04.11.04 18:41
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Ничем, а это определение Вы молги использовать в другой модуле (cpp)? Предвижу, что нет. А почему тогда от шаблонов Вы хотите тогоже?


Потому, что это удобно. Хочется иметь отдельно объявление и отдельно реализацию. А то, что шаблоны сделали ввиде макросов, на мой взгляд не повод мешать все в кучу. Да собственно все и работает, спасибо старшим товарищим.
Re[5]: Как использовать тип из шаблона в другом файле?
От: Анатолий Широков СССР  
Дата: 04.11.04 20:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Анатолий Широков, Вы писали:


АШ>>Ничем, а это определение Вы молги использовать в другой модуле (cpp)? Предвижу, что нет. А почему тогда от шаблонов Вы хотите тогоже?


А>Потому, что это удобно. Хочется иметь отдельно объявление и отдельно реализацию. А то, что шаблоны сделали ввиде макросов, на мой взгляд не повод мешать все в кучу. Да собственно все и работает, спасибо старшим товарищим.


А что работает? Как я понял вы хотели добится следующего:

// foo.h
template<typename T> void foo(T v);

// foo.cpp
#include "foo.h"

template<typename T> void foo(T v)
{
   ...
}

// main.cpp
#include "foo.h"

int main()
{
    foo(1);
}


Но это не работает по понятным причинам — так что же работает — вот это:

// main.cpp
#include "foo.cpp"

int main()
{
    foo(1);
}


И чего Вы добились?
Re[6]: Как использовать тип из шаблона в другом файле?
От: Аноним  
Дата: 05.11.04 03:30
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>И чего Вы добились?


Вот этого http://www.rsdn.ru/article/cpp/templmod.xml
Автор(ы): Валерий Лаптев
Дата: 30.10.2004
В этой статье рассказывается о методах отделения реализации шаблона от его интерфейсной части и о том, как можно заставить это работать на популярных компиляторах наподобие MS Visual C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.