Другие языки программирования и технологии
шаблоны функций
для объявления шаблона функции можно применять template <typename/class> ... вопрос: в чем разница между typename и class?
class означает, что в шаблон передается тип (не обязательно class)
template<class T>
int Compare(const T &a, const T &b)
{
if (a < b) return -1;
if (a == b) return 0;
return 1;
}
char cha, chb;
int n = Compare< char >(cha, chb);
int ia, ib;
int n = Compare< int >(ia, ib);
double da, db;
int n = Compare< double>(da, db);
MyClass mya, myb;
int n = Compare< MyClass>(mya, myb);
// но MyClass должено иметь операторы < и ==, потому что они используются в шаблоне
// class MyClass {
// public:
// BOOL operator <(const MyClass &a);
// BOOL operator ==(const MyClass &a);
// };
typename означает, что в шаблон передается значение типа typename
template< DWORD A, DWORD C>
class CRand
{
DWORD m_dwRnd;
public:
CRand() : m_dwRnd(0) {}
DWORD operator()() { return m_dwRnd = m_dwRnd * A + C; }
};
CRand<0x9E00AF5D,0x53D9403B> rnd;
for (int i =0; i < 10; i++)
{
printf("rnd = %u\n", rnd() );
}
template<class T>
int Compare(const T &a, const T &b)
{
if (a < b) return -1;
if (a == b) return 0;
return 1;
}
char cha, chb;
int n = Compare< char >(cha, chb);
int ia, ib;
int n = Compare< int >(ia, ib);
double da, db;
int n = Compare< double>(da, db);
MyClass mya, myb;
int n = Compare< MyClass>(mya, myb);
// но MyClass должено иметь операторы < и ==, потому что они используются в шаблоне
// class MyClass {
// public:
// BOOL operator <(const MyClass &a);
// BOOL operator ==(const MyClass &a);
// };
typename означает, что в шаблон передается значение типа typename
template< DWORD A, DWORD C>
class CRand
{
DWORD m_dwRnd;
public:
CRand() : m_dwRnd(0) {}
DWORD operator()() { return m_dwRnd = m_dwRnd * A + C; }
};
CRand<0x9E00AF5D,0x53D9403B> rnd;
for (int i =0; i < 10; i++)
{
printf("rnd = %u\n", rnd() );
}
class - это старый стандарт
typename - новый
Используй typename и не парься
typename - новый
Используй typename и не парься
эт сяпп, как понимаю.
дык вот, typename - это ты объявляешь тип используемый в последующем, а класс - это собственно класс далее используемый.. . т. е.
template<typename>
class Test
{
public:
Test():number(25);
T get_number()
{return number;}
private:
T number;
};
temlate <typename>
T MyFunc(void)
{
A MyClass;
return A.get_number();
}
int main()
{
MyFunc<int,>();
return 0;
}
т. е. в тайпнэйм ты можешь подавать любой тип, а class - класс, более конкретно. . то что ты хочешь использовать. в общем как то так
дык вот, typename - это ты объявляешь тип используемый в последующем, а класс - это собственно класс далее используемый.. . т. е.
template<typename>
class Test
{
public:
Test():number(25);
T get_number()
{return number;}
private:
T number;
};
temlate <typename>
T MyFunc(void)
{
A MyClass;
return A.get_number();
}
int main()
{
MyFunc<int,>();
return 0;
}
т. е. в тайпнэйм ты можешь подавать любой тип, а class - класс, более конкретно. . то что ты хочешь использовать. в общем как то так
Похожие вопросы
- с использованием шаблонов функций на языке С++ помогите пожалуйста
- C++. Шаблоны функций
- ПОМОГИТЕ ПОСТАВИТЬ ШАБЛОН НА Ucoz
- Вопрос по бесплатным шаблонам сайтов
- С++. Как запихнуть класс-шаблон бинарной кучи в библиотеку?
- Нужно оценить Flash шаблон?
- Оцените шаблон и юзабилити такого сайта на движке wordpress
- Как установить шаблон jooomla?
- Где можно продать шаблон сайта ?
- Шаблон html страницы с использованием фреймов