Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Использование шаблонов

2.4K
22 октября 2002 года
BlackName
2 / / 22.10.2002
Я что-то совсем "затормозил". Никак не могу в классе описать шаблон функции. Суть в том, что описание класса находится в файле Method.h:
#ifndef CMETHODS
#define CMETHODS 1

class CMethods{
public:
template <class SType> void BubbleSort(SType *Item, long Count);
};
#endif

и в файле Method.cpp:
#include "stdafx.h"
#include "Methods.h"

template <class SType> void CMethods::BubbleSort(SType *Item, long Count)
{
}
При вызове из другого файла:
CMethods Sort;
char str[]={'s', 'f', 'k', 'o', 't', 'a'};

Sort.BubbleSort(str, 6);
Лезет ошибка:
Linking...
Analysis.obj : error LNK2001: unresolved external symbol "public: void __thiscall CMethods::BubbleSort(char *,long)" (?BubbleSort@CMethods@@QAEXPADJ@Z)
Debug/FTable.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

FTable.exe - 2 error(s), 0 warning(s)

ПОДСКАЖИТЕ В ЧЕМ ДЕЛО? Может я вчера слегка "перебрал"?..
1.6K
29 октября 2002 года
GDragon
67 / / 11.10.2002
Ты свалил в кучу объявления шаблона функции и шаблона класса - это разные вещи. См. сюда:

//Вот это объявление шаблона функции
template <class T> int Func(T arg1, T arg2)
{
if(arg1 == arg2)
return 1;
return 0;
}

//Вот это объявление шаблона класса
template <class T, int Size> class MyClass
{
public:
T Method(T arg1, T arg2);
};

//Так описываются методы шаблона класса
template <class T, int Size> T MyClass<T, Size>::Method(T arg1, T arg2)
{
if(arg1 < (T)Size)
return arg1-arg2;
return 0;
}



int main(int argc, char* argv[])
{
int Result;

//Вот это работает шаблон функции - объявлять ее больше не нужно
//функция создастся по шаблону автоматически, определив
// тип передаваемых аргументов
Result = Func((int)3, (int)4);

//А это уже класс, созданный по шаблону класса
MyClass <int, 10> MyClassExemplar;
Result = MyClassExemplar.Method(5, 10);
return 0;
}

Удачи.
2.4K
29 октября 2002 года
BlackName
2 / / 22.10.2002
Цитата:
Originally posted by GDragon
Ты свалил в кучу объявления шаблона функции и шаблона класса - это разные вещи. См. сюда:

//Вот это объявление шаблона функции
template <class T> int Func(T arg1, T arg2)
{
if(arg1 == arg2)
return 1;
return 0;
}

//Вот это объявление шаблона класса
template <class T, int Size> class MyClass
{
public:
T Method(T arg1, T arg2);
};

//Так описываются методы шаблона класса
template <class T, int Size> T MyClass<T, Size>::Method(T arg1, T arg2)
{
if(arg1 < (T)Size)
return arg1-arg2;
return 0;
}



int main(int argc, char* argv[])
{
int Result;

//Вот это работает шаблон функции - объявлять ее больше не нужно
//функция создастся по шаблону автоматически, определив
// тип передаваемых аргументов
Result = Func((int)3, (int)4);

//А это уже класс, созданный по шаблону класса
MyClass <int, 10> MyClassExemplar;
Result = MyClassExemplar.Method(5, 10);
return 0;
}

Удачи.



Боюсь, что мы не поняли друг друга. Суть проблеммы в том, что я пытался В ОБЫЧНОМ КЛАССЕ создать шаблон функции, принадлежащей ЭТОМУ КЛАССУ. Естественно, что кроме шаблона этой функции, в классе будут другие функции и процедуры. Правда, сейчас я уже начинаю сомневаться, а можно ли это делать?

1.6K
29 октября 2002 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by BlackName


Боюсь, что мы не поняли друг друга. Суть проблеммы в том, что я пытался В ОБЫЧНОМ КЛАССЕ создать шаблон функции, принадлежащей ЭТОМУ КЛАССУ. Естественно, что кроме шаблона этой функции, в классе будут другие функции и процедуры. Правда, сейчас я уже начинаю сомневаться, а можно ли это делать?



Вряд ли это возможно, по крайней мере мне подобные приемы неизвестны. Есть способ проще: создай шаблон функции за пределами класса, а в классе создай методы, которые будут вызывать этот шаблон с аргументами различного типа.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог