Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

шаблоны функций

Gleb Zykov Знаток (311), закрыт 14 лет назад
для объявления шаблона функции можно применять template <typename/class> ...

вопрос: в чем разница между typename и class?
Лучший ответ
Κότ μάτρόϛκϰΗ Просветленный (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 - класс, более конкретно. . то что ты хочешь использовать. в общем как то так
Девушка Весна Мудрец (17777) 14 лет назад
class - это старый стандарт
typename - новый

Используй typename и не парься
Похожие вопросы