Я пытаюсь преобразовать общий указатель на базовый класс в общий указатель на шаблонный производный класс при использовании библиотеки (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
Это потому что 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);
Других решений пока нет …