Форум программистов, компьютерный форум CyberForum.ru

Не могу определить ошибку (конкретизация шаблонной функции) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ строка http://www.cyberforum.ru/cpp-beginners/thread453122.html
Всем привет! Есть вопрос: Создать класс Time для работы со временем в формате «час:минута:секунда». Класс должен включать в себя функциию инициализации строкой (например, «23:59:59»). Помогите пожалуйста реализовать, а то неправильно получается((
C++ Алгоритмы замещения страниц(STL, вторая попытка) Помогите пожалуйста найти ошибку в алгоритме, вроде все правильно работает, но иногда при разных входных данных возникает ошибка. Так вот, решил реализовать алгоритм замещения страниц "Вторая попытка". Коротко о задаче, имеется память ограниченного размера, в память на вход подаются страницы, алгоритм подобен FIFO, отличие в том, что если страница есть в памяти, то она переводится в конец... http://www.cyberforum.ru/cpp-beginners/thread453116.html
Почему for_each() не выводит кирилицу C++
Вот такой код: #include <iostream> #include <string> #include <vector> #include <algorithm> void show(const std::string & s); int main() { using namespace std; setlocale(0, "");
C++ Перевод из одной системы счисления в другую.
Мне задали сделать калькулятор для программиста на языке С. В нем требуется выполнение операций только целые числа, 4 арифметических действия, битовые операции | & ~ ^, перевод в 8,10,16,2 систему исчисления. Вопрос: Есть ли функции в С которые осуществляют перевод в 8,10,16,2 систему исчисления? Какие это функции, как их использовать. P.S. Если вы уже делали такой калькулятор, выложите...
C++ Числа - близнецы http://www.cyberforum.ru/cpp-beginners/thread453065.html
В массиве простых чисел определить наличие чисел-близнецов (11-13; 7-5; 3-5)
C++ функция вывода системного времени Всем привет! Необходимо написать функцию вывода текущего системного времени Вот слепил, а не работает: void InitTime(Time& time) { time_t rawtime; struct tm *timeinfo; time(&rawtime); подробнее

Показать сообщение отдельно
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
27.02.2012, 18:19     Не могу определить ошибку (конкретизация шаблонной функции)
можно сделать иначе.
как я понял, для разных типов понадобилась разная реализация только ф-ии inTreeHelper. причем все различие сводится к способу сравнения переменных data и currentLeafPtr->data. в таком случае нет нужды определять специализацию шаблона класса. достаточно обобщить и специализировать сравнение переменных. что все это значит? поясню на примере вашей ф-ии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
template<typename T>
void
Tree<T>::
inTreeHelper(const T& data, Leaf<T>* currentLeafPtr)
{
    if(currentLeafPtr == NULL)//создаётся корень
    {
        Leaf<T>* ptr = newLeaf(data);
        root = ptr;
        return;
    }
    // вычисление результата сравнения
    int cmp_val = my_compare<T>(data, currentLeafPtr->data);
    if(cmp_val < 0)
    {
        if(currentLeafPtr->left == NULL)
            currentLeafPtr->left = newLeaf(data);
        else
            inTreeHelper(data, currentLeafPtr->left);
    }
    else if(cmp_val > 0)
    {
        if(currentLeafPtr->right == NULL)
            currentLeafPtr->right = newLeaf(data);
        else
            inTreeHelper(data, currentLeafPtr->right);
    }
    else
    {
        cout << "Это значение есть в дереве" << endl;
    }
}
осталось только написать шаблонную ф-ю my_compare и специализировать ее для С-строк(или еще чего-нибудь при надобности). как пример, она может выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<typename T>
int
my_compare(T a, T b)
{
    return a < b ? -1 : a == b ? 0 : 1;
}
 
template<>
int
my_compare(char* a, char* b)
{
    return strcmp(a, b);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru