Использование шаблонов
#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)
ПОДСКАЖИТЕ В ЧЕМ ДЕЛО? Может я вчера слегка "перебрал"?..
//Вот это объявление шаблона функции
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;
}
Удачи.
Цитата:
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;
}
Удачи.
Ты свалил в кучу объявления шаблона функции и шаблона класса - это разные вещи. См. сюда:
//Вот это объявление шаблона функции
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;
}
Удачи.
Боюсь, что мы не поняли друг друга. Суть проблеммы в том, что я пытался В ОБЫЧНОМ КЛАССЕ создать шаблон функции, принадлежащей ЭТОМУ КЛАССУ. Естественно, что кроме шаблона этой функции, в классе будут другие функции и процедуры. Правда, сейчас я уже начинаю сомневаться, а можно ли это делать?
Цитата:
Originally posted by BlackName
Боюсь, что мы не поняли друг друга. Суть проблеммы в том, что я пытался В ОБЫЧНОМ КЛАССЕ создать шаблон функции, принадлежащей ЭТОМУ КЛАССУ. Естественно, что кроме шаблона этой функции, в классе будут другие функции и процедуры. Правда, сейчас я уже начинаю сомневаться, а можно ли это делать?
Боюсь, что мы не поняли друг друга. Суть проблеммы в том, что я пытался В ОБЫЧНОМ КЛАССЕ создать шаблон функции, принадлежащей ЭТОМУ КЛАССУ. Естественно, что кроме шаблона этой функции, в классе будут другие функции и процедуры. Правда, сейчас я уже начинаю сомневаться, а можно ли это делать?
Вряд ли это возможно, по крайней мере мне подобные приемы неизвестны. Есть способ проще: создай шаблон функции за пределами класса, а в классе создай методы, которые будут вызывать этот шаблон с аргументами различного типа.