Приведение shared_ptr к шаблонному классу

Я пытаюсь преобразовать общий указатель на базовый класс в общий указатель на шаблонный производный класс при использовании библиотеки (UHD).
В частности, я получил общий указатель на класс filter_info_base (Вот) и я хотел бы привести его к указателю на digital_filter_base учебный класс (Вот), так как это позволило бы мне получить сигналы фильтра и другие параметры через соответствующие геттеры.

Я искал в Интернете несколько часов, но все решения, которые я получил, не работали. В частности, ответ, кажется, «использовать std::dynamic_pointer_cast«, но если я сделаю

uhd::digital_filter_base<int16_t>::sptr p = std::dynamic_pointer_cast<uhd::digital_filter_base<int16_t>>(a_rx_FIR1);

(где a_rx_FIR1 это sptr для базового класса) я получаю из GCC:

error: no matching function for call to ‘dynamic_pointer_cast(uhd::filter_info_base::sptr&)’
uhd::digital_filter_base<int16_t>::sptr p = std::dynamic_pointer_cast<uhd::digital_filter_base<int16_t>>(a_rx_FIR1);

Кто-нибудь получил представление о том, как сделать этот актерский состав?

Заранее спасибо и хорошего дня!

RH

-2

Решение

Это потому что uhd::filter_info_base::sptr является общим указателем повышения:

typedef boost::shared_ptr< filter_info_base > sptr;

А также std::dynamic_pointer_cast работает только для std::shared_ptr, вы не можете смешивать их, и вам нужно использовать буст версия:

uhd::digital_filter_base<int16_t>::sptr p = boost::dynamic_pointer_cast<uhd::digital_filter_base<int16_t>>(a_rx_FIR1);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]