-2

我试图在使用库(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);

有没有人知道如何做这个演员?

提前致谢,祝您有美好的一天!

相对湿度

4

1 回答 1

3

那是因为uhd::filter_info_base::sptr是一个 boost 共享指针:

typedef boost::shared_ptr< filter_info_base > sptr;

并且std::dynamic_pointer_cast只适用于std::shared_ptr,你不能混合它们,你需要使用boost 版本

uhd::digital_filter_base<int16_t>::sptr p = boost::dynamic_pointer_cast<uhd::digital_filter_base<int16_t>>(a_rx_FIR1);
于 2017-09-05T11:28:21.830 回答