Κότ μάτρόϛκϰΗ
Просветленный
(21386)
14 лет назад
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() );
}
thisguy
Профи
(603)
14 лет назад
эт сяпп, как понимаю.
дык вот, 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 и class?