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

Как сделать один шаблон для разных типов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не работает код http://www.cyberforum.ru/cpp-beginners/thread632692.html
Помогите пожалуйста перепробовал уже все компиляторы ... не хочет запускаться данный код ( думал на visual C++ 6.0 все запустится но все безуспешно( #include <iostream.h> int main() { cout << "Hollo World!\n"; return 0; }
C++ rawurlencode() в С++ Привет всем! Надо срочно пару строк закодировать под C++, но никак не могу найти аналог функций rawurlencode() в С++. Может кто-нить знает алгоритм этой кодировки. Если кто-нить сталкивался с таким, подскажите пожалуйста! http://www.cyberforum.ru/cpp-beginners/thread632689.html
Динамическое изменение консольного окна, с избежанием появления полос прокрутки C++
Здравствуйте, коллеги. Я нуждаюсь в помощи и совете. #include <iostream> #include <windows.h> #include <conio.h> #include <locale> using namespace std; const int WIDTH = 59;
с++ версии выпусков где просмотреть C++
у меня такое дело - хотел с 2010 студии перейти на с++ 6.0 но она виснет странным образом. есть что то поновее чем с++ 6 но без установки дап нет.
C++ Симулятор собеседника? http://www.cyberforum.ru/cpp-beginners/thread632661.html
Ребята, привет. Хочу задать вопрос. Я хочу сделать программу, в которой пишешь например: 1 - программа отвечает 2. Допустим. Вопрос: Как это сделать?.
C++ error C2228: left of '.add' must have class/struct/union type. в чем ошибка? Помогите понять в чем ошибка. Пасиб. #include <iostream.h> class book { private: char name_book; char name_avtor; int number; подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.08.2012, 00:48     Как сделать один шаблон для разных типов

Не по теме:

Простигосподи, вам рассказывали, что такое знаки препинания? Или это я тупой...


Так это, в чём проблема? Это конкретный вопрос. У вас есть задача. Её надо решить. Вы не знаете, как. Так?
Так что за задача, с которой возникла проблема? Сделать так, чтобы функция сортировки использовалась одинаково для всех типов:
C++
1
2
3
4
5
6
7
8
9
container<int> foo;
foo << 3 << 1 << 2;
sort(foo);
// foo: [1, 2, 3]
 
container<student> bar;
bar << student(1.2) << student(9.1) << student(-23.1);
sort(bar);
// bar: [{student: -23.1}, {student: 1.2}, {student: 9.1}]
И чтобы её код был сделан только один раз:
C++
1
2
3
4
5
6
7
template <class T>
void container<T>::sort()
{
  /* какой-то алгоритм сортировки, которому
     необходимо делать сравнения элементов
     типа T: container[i] <= container[j] */
}
То уже сказал же: перегрузите оператор сравнения (метод operator<=). Тогда container[i] <= container[j] будет работать и для встроенных типов, и для тех T, где оно перегружено.

Единственное ограничение состоит в том, чтобы сделать это в рамках одного шаблонного класса, без дополнительных специализаций. Может быть так вообще сделать нельзя, тогда так и скажите.
Вот я не понял вот этого. Что должно находиться в рамках одного класса? Чтобы внутри container<T> был прописан код для сравнения каких-нибудь student что ли?

Тогда да, это делается специализацией:
C++
1
2
3
4
5
6
7
8
template<>
class container<student> {
public:
  void sort();
  /* другие методы container */
}
 
void container<student>::sort() { /* ... */ }
Но другие методы тоже придётся реализовывать. К сожалению, при специализации нельзя переопределить какой-то один метод, а остальные унаследовать из общего шаблона (вообще, специализация может содержать совершенно другой набор методов, нежели общий шаблон <class T>). Возможно, это было вашей проблемой. Тогда ответ: нельзя.
 
Текущее время: 14:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru