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

Определение чистой виртуальной функции класса-шаблона - C++

Восстановить пароль Регистрация
 
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
15.07.2014, 03:56     Определение чистой виртуальной функции класса-шаблона #1
Есть класс Comparable<T>:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
class Comparable : virtual public Object {
public:
    virtual int compareTo(const T other) const = 0;
 
    virtual bool operator< (const T other) const final { return compareTo(other) <  0; }
    virtual bool operator> (const T other) const final { return compareTo(other) >  0; }
    virtual bool operator<=(const T other) const final { return compareTo(other) <= 0; }
    virtual bool operator>=(const T other) const final { return compareTo(other) >= 0; }
    virtual bool operator==(const T other) const final { return compareTo(other) == 0; }
    virtual bool operator!=(const T other) const final { return compareTo(other) != 0; }
};
И есть класс Time, который должен реализовать сравнения как и другими Time, так и с строками (char*):
C++
1
2
3
4
5
6
class Time, public Comparable<Time>, public Comparable<char*> {
    /**/
    virtual int compareTo(const Time other) const { /**/ }
    virtual int compareTo(const char* other) const { /**/ }
    /**/
};
Но компилятор ругается, что я не реализовал метод compareTo(const char* other), хотя это не так.
Кстати, за compareTo(const Time other) ничего не говорит, значит все нормально.
И в чем ошибка?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2014, 03:56     Определение чистой виртуальной функции класса-шаблона
Посмотрите здесь:

C++ объявление и определение функции класса
C++ Какими способами можно использовать функции класса B, как параметры функции Sub класса А?
C++ определение функции за пределами шаблона класса
C++ Определение метода-шаблона за пределами шаблона класса
Создание шаблона bool-функции, принимающей в качестве параметра экземпляр класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.07.2014, 07:08     Определение чистой виртуальной функции класса-шаблона #2
Во втором фрагменте кода бросаются глаза запятая вместо двоеточия после названия класса.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.07.2014, 10:14     Определение чистой виртуальной функции класса-шаблона #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
QGuest, Потому что действительно нет такой функции. Должно быть
C++
1
virtual int compareTo(char* const other) const { /**/ }
Т.к. функция compareTo принимает const T, а T в данном случае есть char*, учитывая, что
C++
1
const char*
является указателем на константу - это не то что нужно. Нужен константый указатель, который будет
C++
1
char* const
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
15.07.2014, 10:28     Определение чистой виртуальной функции класса-шаблона #4
Добавлю к ответу ForEveR'а const в обявлении функции тоже входит в ее сигнатуру. Т.е. вот это две разные функции:
C++
1
2
    virtual int compareTo(const Time other) const { /**/ }
    virtual int compareTo(const Time other)  { /**/ }
olper
15.07.2014, 11:38
  #5

Не по теме:


Цитата Сообщение от Б. Страуструп
Независимые концепции должны быть представлены независимо и объединятся только при необходимости. При нарушении этого принципа вы либо объединяете несвязанные концепции, либо создаете ненужные зависимости. В любом случае вы получаете менее гибкий набор компонентов для построения системы.
Б. Страуструп
Глава 13. Шаблоны.
Стих первый «Введение»
если более приземленно, то "шаблоны" и виртуальные функции как молоко и селедка, по отдельности вроде ничего, а вместе могут привести к неожиданному результату

Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
15.07.2014, 11:44     Определение чистой виртуальной функции класса-шаблона #6
Шаблоны и виртуальные функции вполне удачно сочетаются. Например для реализации type erasure.
Yandex
Объявления
15.07.2014, 11:44     Определение чистой виртуальной функции класса-шаблона
Ответ Создать тему
Опции темы

Текущее время: 22:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru