Вобщем вроде как-то так все решается:
Код
usr::ring_buffer<int, 20> ring1;
typedef usr::ring_buffer<int, 1> * ring_ptr;
int _tmain(int argc, _TCHAR* argv[])
{
ring_ptr pring = reinterpret_cast<ring_ptr>(&ring1);
ring1.push(1);
ring1.push(2);
pring->push(3);
std::cout << int(pring->get_count()) << std::endl;
std::cout << pring->pop() << "\t" << pring->pop_back() << std::endl;
std::cout << int(pring->get_count()) << std::endl;
return 0;
}
Вывод:
Цитата
3
1 3
1
Для продолжения нажмите любую клавишу . . .
Проверялось в MS Visual C++ 2010.
Было замечено следующее.
если тип указателя задан как
Код
typedef usr::ring_buffer<int, 1> * ring_ptr;
то при попытке положить второй элемент в буфер используя указатель
Код
pring->push(2);
ничего туда не ложится. Именно ВТОРОЙ элемент (при размере буфера указателя 1) должен быть положен напрямую через
Код
ring1.push(2);
а не через указатель, остальные же элементы можно ложить как угодно, хоть напрямую хоть через указатель.
чтобы это обойти надо задать тип указателя как-нибудь так
Код
typedef usr::ring_buffer<int, 100> * ring_ptr;
тоесть задать заведомо бОльший размер буфера у указателя
Вобщем всеравно какие-то костыли получаются...
Сообщение отредактировал aliko - Jun 23 2011, 09:37