Sto cercando di utilizzare shared_ptr
in un progetto incorporato che è stato creato con xc32 1.34 (una derivata di gcc 4.5.2). Il progetto ha disabilitato RTTI con -fno-rtti
.shared_ptr senza RTTI?
#include <memory>
Basta con l'indicazione dell'header mi dà i seguenti errori:
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory: In member function 'virtual void* std::tr1::_Ref_count_del<_Ty, _Dx>::_Get_deleter(const std::type_info&) const':
In file included from APP/MODULES/LIGHT_MANAGER/LightManager.cpp:13:0:
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory:1264:39: error: cannot use typeid with -fno-rtti
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory: In member function 'virtual void* std::tr1::_Ref_count_del_alloc<_Ty, _Dx, _Alloc>::_Get_deleter(const std::type_info&) const':
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory:1299:39: error: cannot use typeid with -fno-rtti
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory: In function '_Dx* std::tr1::get_deleter(const std::tr1::shared_ptr<_Ty2>&)':
/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory:1956:44: error: cannot use typeid with -fno-rtti
Quindi quello che voglio sapere è: è generalmente impossibile usare shared_ptr
senza RTTI, o sto facendo qualcosa di sbagliato?
C++ senza RTTI non è più C++. Tutte le scommesse (intendo * tutte *) sono disattivate. Chi ti garantisce è possibile utilizzare '' o '' o '' senza RTTI? –
'shared_ptr' type-cancella il deleter che richiede RTTI. Non credo che ci sia un modo per aggirare quello che non è il tuo o trovare un'implementazione che non lo faccia.Sfortunatamente 'boost :: shared_ptr' supporta anche un deleter, forse puoi trovare una versione precedente che non lo fa. – nwp
@nwp RTTI non è richiesto per la cancellazione del tipo. Il solito schema è una classe wrapper di template che implementa una classe astratta. – Quentin