реклама на сайте
подробности

 
 
> Частичная специализация методов в шаблоне класса, С++
jorikdima
сообщение Jun 22 2010, 19:15
Сообщение #1


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Здравствуйте.
Никогда не любил шаблоны, видимо потому что спал, когда на лекциях про них рассказывали, либо синтаксис просто жутко сложен. В общем сейчас нужна подсказка по ним. Использую scmRTOS, там шаблоы используются часто, в том чиле и для реализации кольцевого буфера.
Код
template<typename T, word Size, typename S = byte>
    class ring_buffer
    {
    public:
        ring_buffer() : Count(0), First(0), Last(0) { }

        //----------------------------------------------------------------
        //
        //    Data transfer functions
        //
        bool write(const T* data, const S cnt);
        void read(T* const data, const S cnt);
............................................................

У шаблона 3 параметра: тип хранимых данных, размер буфера и тип индексов. Есть функции записи и чтения, которые тоже реализованы шаблоном:
Код
template<typename T, word Size, typename S>
void usr::ring_buffer<T, Size, S>::read(T* data, const S cnt)
{
}

Так вот, я могу специализировать этот метод для конкретных параметров шаблона, например:
Код
template<>
void usr::ring_buffer<int, 100, int>::read(int* data, const int cnt)
{
}

И так оно работает (по крайней мере компилируется). Но! В данном случае, такой параметр шаблона как размер буфера, я бы хотел так и оставить параметом, специализировать я хочу только тип данных и тип индексов.
Хотел бы написать что-то вроде:
Код
template<>
void usr::ring_buffer<int, Size, int>::read(int* data, const int cnt)
{
}

Но говорит, что не знает что такое Size.
Я видел про специализацию шаблонов классов, но на сколько я понял, это более глобально, чем нужно мне. Не придется ли мне там переопределять все методы и поля класса? Мне-то нужно только read и write определить для частного случая хранения int. Как это описать?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shreck
сообщение Jun 23 2010, 01:45
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Погуглите "Симуляция частичной специализации". Будет много информации. Но при отсутствии поддержки компилятора, реализация частичной специализации будет не такой изящной, как вам хотелось бы.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 05:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016