Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Си++ template


Автор: GrayCardinal 15.2.2007, 18:18
Как в template класса объявить функцию, принимающую любой другой тип (ну, навроде тоже temlate'а).
Страуструпа не читал, пока методом индукции smile Все логичные варианты вроде перебрал... И ничего. :-(

Код


template <typename T>
class TipaClass {
    ...
    anyFunction (anyType);

    ...
};


Соответственно правильно записать anyFunction в хэйдере и в коде...
Заранее спасибо...
Олег.

ЗЫ
Простите великодушно наСишника за такие вопросы smile

Автор: Sartorius 15.2.2007, 18:27
 Если тип аргумента должен отличаться от T так и объяви еще один typename в template...
PS http://valera.asf.ru/cpp/book/c16.shtml - там все подробно написано

Автор: Xenon 15.2.2007, 18:28
Код

template <typename T>
class TipaClass {
    ...
    template <typename anyType>
    anyFunction (anyType);

    ...
};


?

Автор: Oleg_Ci 15.2.2007, 18:54
Вчера такое замутил
Код

template <typename type>
class CList{
...
    template <typename Ty> 
    bool operator==( const CList<Ty> & List ) const;
};

template <typename type> template <typename Ty>
bool CList<type>::operator ==( const CList<Ty> & List )const{
...
}

Автор: Xenon 15.2.2007, 19:04
Отедльно в хедере и реализацие? Ну тогда не получится сделать функцию, которая принимает любой типа - тебе придется моделью явного воплощения определить какие-то конкретные типы - проще все в хедере сделать smile

Автор: GrayCardinal 15.2.2007, 19:21
Xenon
Ага. А код ? Если не в хейдер, а вынести ?
Извините, конечно... Доку почитаю... Только _не сейчас_  smile (брррррррррр  smile )

Автор: Xenon 15.2.2007, 19:34
GrayCardinal, Ну тогда придется либо явно воплощаться, либо использовать export, но это почти никем не поддерживается ... Поэтому рекомендуется объявлть и определять класс и его члены в одном модуле.
ЗЫ. Если вынести код в том же модуле, то все будет нормально. К тому же Oleg_Ci уже привел пример smile

Автор: nickless 15.2.2007, 19:37
Можно еще 2 хедера использовать, один для объявления всего, а другой для реализации шаблонов, компилятору без разницы, а файлы поменьше будут

Автор: GrayCardinal 15.2.2007, 20:02
Xenon
Oleg_Ci, говоришь ? Ах, вот оно что ... угум 
(рука придерживающая веко отпадает, глазик закрывается... все спасибо, до завтра, парни smile )

Автор: Xenon 15.2.2007, 20:11
nickless, так это же будет разделенением на интерфейс и реализацию, а это 2 уже две единицы компиляции ?

Автор: HappyLife 15.2.2007, 20:17
Для люблю типа, можешь еще заюзать, функцию принимающую много параметров.

Автор: nickless 15.2.2007, 20:20
Xenon, нет, я имею ввиду типа этого:
Код

template <class T>
class Blah
{
    Blah(T);
};

#include "Blah.t"

Просто хедер на 2 части разделить, а то не люблю я хедеры на несколько сотен строк  smile 

Автор: GrayCardinal 16.2.2007, 04:48
Цитата

Для люблю типа, можешь еще заюзать, функцию принимающую много параметров. 

Тоже вариант  smile

Добавлено @ 04:50 
PS.
уберите нафиг шапки ! а то реклама редхета какая-то :-(

Автор: V.A.KeRneL 16.2.2007, 12:39
Цитата(GrayCardinal @  16.2.2007, 04:48 Найти цитируемый пост)

PS.
уберите нафиг шапки ! а то реклама редхета какая-то :-(

Угу, точняк! smile Мож тогда ваще их не убирать, а договориться с ними о спонсорстве?

Автор: GrayCardinal 16.2.2007, 13:51
V.A.KeRneL
Во-во smile (млин  smile )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)