Mam kod C++, który intensywnie używa shared_ptr
i STL. Częstym nagłówek mówiC++ 0x std :: shared_ptr vs. boost :: shared_ptr
#include<boost/shared_ptr.hpp>
using boost::shared_ptr; // for shared_ptr
using namespace std; // for STL
chciałem przełączyć do C++ 0x teraz skorzystać z funkcji językowych, za pomocą gcc 4.6 z -std=c++0x
. Istnieje również teraz std::shared_ptr
, co prowadzi do niejednoznaczności dla nieokreślonego shared_ptr
(boost::shared_ptr
vs std::shared_ptr
).
Po przełączeniu na std::shared_ptr
zamiast, jak to:
#include<memory>
using namespace std; // for STL; also imports std::shared_ptr
następnie otrzymuję problemy z boost::python
, która działa apprently z boost::shared_ptr
tylko (przynajmniej bez dalszego błahy):
/usr/include/boost/python/object/make_ptr_instance.hpp:30:52: error: no matching function for call to 'get_pointer(const std::shared_ptr<Cell>&)'
My Pytanie brzmi:
- jeśli e jest prostym rozwiązaniem pozwalającym rozwiązać niejednoznaczność między
boost::shared_ptr
istd::shared_ptr
(z wyjątkiem nie używania obecnie C++ 0x), a także - , jeśli
boost::shared_ptr
ostatecznie będzie tylko aliasem dlastd::shared_ptr
; to automatycznie rozwiązałoby mój problem.
Dzięki!
PS. za pomocą doładowania 1.42. – eudoxos
Rozwiązaniem byłoby prawdopodobnie pozbyć się razem 'use namespace std'. Może to być tak proste, jak zrobienie globalnego wyszukiwania i zamiany dla każdego elementu STL. – stijn
Dobrze, to byłoby rozwiązanie, ale STL jest używany tak często, że spowodowałoby, że kod byłby mniej czytelny; być może mógłbym rozważyć napisanie pęczka 'using std :: string; używając std :: vector; 'etc deklaracje we wspólnym nagłówku. W rzeczywistości nie ma wielu części 'std ::', które są używane, ale są często używane. – eudoxos