Форум программистов, компьютерный форум, киберфорум
Наши страницы

Шаблонные чистые виртуальные методы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Конструкция в условии http://www.cyberforum.ru/cpp-beginners/thread1138815.html
if(a==b==c==5) Такая конструкции будет работать без сбоев? А то компилятор делает предупреждение.
C++ Передача ofstream в функцию Здравствуйте. Подскажите, пожалуйста, как сделать из участка с 54 по 62 строку отдельную функцию (также с 64 по 73, с 75 по 85, с 87 по 96). Спасибо! using namespace std; int main() { ... http://www.cyberforum.ru/cpp-beginners/thread1138806.html
Определить номера символов в строках и сравнить их C++
Здравствуйте. Помогите, пожалуйста, опыта очень мало. Задача такова: в случаях, когда левая круглая скобка не закрылась в этой же строке, проверить присутствуют ли в исходном тексте не выровненные...
Високосный год C++
Трабл с кодом, ничего не могу понять. Посмотрите, пожалуйста. Вот, что выдает компилятор Line 7: error: multi-character character constant Line 8: error: multi-character character constant...
C++ Считать строку с пробелами http://www.cyberforum.ru/cpp-beginners/thread1138764.html
Проблема такая пытаюсь передать строку в файле в переменную str, но все что идет после пробела не считывается как этого избежать ? #include <iostream> #include <fstream> #include <string>...
C++ Неразбериха: как научиться читать программы Я в шоке, мне надо за неделю научиться читать программы типа этой и знать какой аутпут будет на экране, кто-то может мне в этом помочь? как это сделать, ребята? :( #include <iostream> #include... подробнее

Показать сообщение отдельно
Surgery
3 / 3 / 0
Регистрация: 28.09.2013
Сообщений: 32

Шаблонные чистые виртуальные методы - C++

04.04.2014, 14:23. Просмотров 2178. Ответов 15
Метки (Все метки)

Возник вопрос:
Есть у нас допустим класс, который мы желаем сделать абстрактным:
C++
1
2
3
4
5
6
7
8
9
10
    template <typename T, class = typename std::enable_if<std::is_integral<T>::value>::type> class AbstractIntergal {
    public:
        typedef T value_type;
        value_type value;
        AbstractIntergal() : value(0) {}
 
        AbstractIntergal(value_type src) : value(src) { }
 
        virtual template <class Chr, class Alloc> std::basic_string<Chr, std::char_traits<Chr>, Alloc> toString() = 0;
    };
У него метод toString - чистый виртуальный.
Делаем наследника:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    class Int32 : public AbstractIntergal<__int32> {
    public:
        Int32() : AbstractIntergal()    {};
 
        Int32(value_type src) : AbstractIntergal(src)   {};
 
        template <class Chr, class Alloc> std::basic_string<Chr, std::char_traits<Chr>, Alloc> toString() {
            char buff[10];
            sprintf(buff, "%d", value);
            return std::basic_string<Chr, std::char_traits<Chr>, Alloc>(buff);
        }
    };
При компиляции этого в visual studio возникает множество ошибок:
Error 6 error C3203: 'char_traits' : unspecialized class template can't be used as a template argument for template parameter '_Traits', expected a real typ
Error 7 error C2955: 'std::char_traits' : use of class template requires template argument list
Error 3 error C2923: 'std::char_traits' : 'Chr' is not a valid template type argument for parameter '_Elem'
И так далее, их довольно много. Если убираем из базового класса этот чистый виртуальный метод, то все нормально компилируется. Как понимаю, в таком виде виртуальный метод - шаблон нельзя использовать. Но суть в том, что мне хочется что бы AbstractIntergal опеределял общий интерфейс, который будут реализовывать его потомки. Как тогда это сделать? Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.