Другие языки программирования и технологии
Вопрос по С++. Подробности внутри.
Есть некая структура данных, пусть это будет массив data с элементами типа integer. (пусть будет выглядеть так "int data[5];") И есть функция, осуществляющая поиск по этой структуре, назовём её "int search("массив","тип", "значение");". Ну, найдя элемент равный закинутой переменной "значение", она возвращает номер этого элемента. >>>Вот главный вопрос, как закинуть в эту функцию значения "тип" и "значение", если мы заранее не знаем какой тип у массива. <<< Т.е. нужно указать нашей функции какого типа то, что мы ищем; и значение этого искомого нечта. Буду благодарен ответу. ps: Сори, если что, за корявую формулировку, просто речь идёт на самом деле о связном списке из структур и классе, который с ним работает.
Очевидно, что шаблоны подойдут здесь идеально.
template < typename T >
size_t search(const T arr[], size_t size, const T& value)
{
for (size_t i = 0; i < size; i++)
if (arr[ i ] == value)
return i;
return static_cast<size_t>( -1 ); // ну или return size, кому как больше нравится
}
А по-хорошему:
template < typename TIterator, typename TValue >
TIterator search(TIterator first, TIterator last, const TValue& value)
{
for ( ;first != last; first++)
if (*first == value)
return first;
return first;
}
А совсем по-хорошему - есть std::find, как раз по такой схеме и организован.
Перегрузка функций для каждого возможного набора аргументов есть ни что иное как маразм.
template < typename T >
size_t search(const T arr[], size_t size, const T& value)
{
for (size_t i = 0; i < size; i++)
if (arr[ i ] == value)
return i;
return static_cast<size_t>( -1 ); // ну или return size, кому как больше нравится
}
А по-хорошему:
template < typename TIterator, typename TValue >
TIterator search(TIterator first, TIterator last, const TValue& value)
{
for ( ;first != last; first++)
if (*first == value)
return first;
return first;
}
А совсем по-хорошему - есть std::find, как раз по такой схеме и организован.
Перегрузка функций для каждого возможного набора аргументов есть ни что иное как маразм.
Чтобы функция воспринимала любой тип данных её нужно перегружать. То есть написать функцию с одинаковым именем и функциональностью, но в качестве параметров, каждый раз указывать разный тип данных (либо разное количество параметров, либо менять их местами. )
Например, вот прототипы 14 функций с одинаковым названием, и все они будут работать в одной программе, главное не запутаться в параметрах)) )
void func(int);
void func(double);
void func(int, int);
void func(double, int);
void func(int, double);
void func(double, double);
void func(int, int, int);
void func(double, int, int);
void func(int, double, int);
void func(int, int, double);
void func(double, double, int);
void func(double, int, double);
void func(int, double, double);
void func(double, double, double);
Например, вот прототипы 14 функций с одинаковым названием, и все они будут работать в одной программе, главное не запутаться в параметрах)) )
void func(int);
void func(double);
void func(int, int);
void func(double, int);
void func(int, double);
void func(double, double);
void func(int, int, int);
void func(double, int, int);
void func(int, double, int);
void func(int, int, double);
void func(double, double, int);
void func(double, int, double);
void func(int, double, double);
void func(double, double, double);
Похожие вопросы
- Пропала память у компа помогите (в подробностях внутри)
- Как сделать вирус на macintosh. Подробности внутри...
- Сколько стоит написание программы? Подробности внутри!
- Нужна помощь программистов, чтобы проучить африканского разводилу. Подробности внутри >>
- Как узнать правильное количество цвета в файле в Corel Draw ?? (подробности внутри)
- можно ли установить 2 антивируса (подробности внутри)
- Необходимо создать короткий скрипт в vbs или в js. Подробности внутри.
- Ассемблер. Написать маленькую программу вычисления арифметического выражения. Подробности внутри.
- Помогите написать небольшую программу на ассемблере (TASM). Подробности внутри.
- Вопрос насчет изучения языков (внутри)