Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2008, 23:17   #1
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию Шаблон функции срвнения. Определить тип.

Мне необходимо написать шаблон функции сравнения то есть, что-то типа этого:
template <class T>
bool equals(T x1, T x2)
{
//здесь мне надо проверить, если передаются *char сравнивать их
с помощью strcmp
//если int или например, bool то просто проверять их обычным =
// и т.д.

}
Подскажите, пожалуйсто, как это реализовать.
Иллидан вне форума Ответить с цитированием
Старый 30.05.2008, 00:02   #2
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Перегрузить эту шаблонную функцию для char*. Или написать специализацию шаблонной функции для данного типа. Внутри функции определять типы не стоит, потому что инстанцирование идет на этапе компиляции.
still_alive вне форума Ответить с цитированием
Старый 30.05.2008, 00:25   #3
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Цитата:
Или написать специализацию шаблонной функции для данного типа
Это как?
Цитата:
Внутри функции определять типы не стоит, потому что инстанцирование идет на этапе компиляции.
Это значит можно определить, но не желательно? А как определить?
Иллидан вне форума Ответить с цитированием
Старый 30.05.2008, 00:44   #4
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Код:
#include <iostream>

template <typename T>
bool equals(T a, T b)
{
	std::cout << "Template\n";
	return true;
}

// template<>
bool equals(char *a, char *b)
{
	std::cout << "char*\n";
	return true;
}

int main()
{
	char *a, *b;
	equals(a, b);
	equals(9, 20);
	equals(a, b);
	equals(34, 34);
	return 0;
}
Цитата:
Это значит можно определить, но не желательно?
Не желательно. Во время исполнения будет идти ненужная проверка, результат которой известен еще на этапе компиляции.
still_alive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставить картинку в шаблон документа natasha Microsoft Office Word 1 17.08.2008 09:21
Среди 20 введёных чисел определить чётные, распечатать их, определить min Spade Помощь студентам 4 15.06.2008 18:39
Нужен шаблон Студэнт Помощь студентам 1 24.12.2007 20:17
Как создать универсальный шаблон документа? CoolMan Microsoft Office Word 1 18.12.2007 09:10