2012-11-18 19 views
13

Mi sembra che manchi qualcosa qui. Sono passato da boost::shared_ptr a std::shared_ptr. shared_ptr faceva parte di TR1 indietro a metà degli anni 2000, e dovrebbe essere disponibile ovunque nel 2012.Apple e shared_ptr

Cercando di utilizzare shared_ptr sotto di Apple mi viene un gran numero di riferimenti non definiti:

SecureArray.h:26:12: error: no member named 'shared_ptr' in 
     namespace 'std' 
using std::shared_ptr; 
     ~~~~~^ 
SecureArray.h:27:12: error: no member named 'tr1' in namespace 
     'std' 
using std::tr1::shared_ptr; 
     ~~~~~^ 
SecureArray.h:487:5: error: unknown type name 'shared_ptr' 
    shared_ptr<SecureVector> m_vector; 

Un tipico comando del compilatore è la seguente (sia GCC e Clang falliscono):

clang++ -g2 -ggdb -O0 -fcatch-undefined-cxx0x-behavior 
    -DSAFEINT_DISALLOW_UNSIGNED_NEGATION=1 -pipe -std=c++0x -Wall -Wextra 
    -Wno-unused-parameter -Wno-tautological-compare 
    -I. -I./esapi -I./deps -I/usr/local/include -I/usr/include -fpic 
    -c src/DummyConfiguration.cpp -o src/DummyConfiguration.o 

sto cercando di comprendere come segue (credo che ho bisogno di modificare questo, ma non mi ricordo il C++ sintassi per dire "guarda qui oppure guarda lì "):

#include <memory> 
using std::shared_ptr; 
using std::tr1::shared_ptr; 

pagine man di Apple non si rivolgono a nulla:

$ man shared_ptr 
No manual entry for shared_ptr 
$ man -k shared_ptr 
shared_ptr: nothing appropriate 

ho Mac OS X 10.8 (completamente rattoppato), Xcode (tutte le patch), e riga di comando Tools installato.

Quindi, come si usa uno std :: shared_ptr su piattaforme Apple?

+0

'apple' non sembra un buon tag –

+0

Che versioni di toolchain? Questo è ciò che è veramente importante. Francamente non mi importa meno del tuo sistema operativo! –

+0

Grazie alla leggerezza. Inteso. Neanche a me importa molto della Apple. – jww

risposta

20

#include <tr1/memory> funzionerà con entrambi i compilatori utilizzando libstdC++. In alternativa, con Clang:

#include <memory> 
using std::shared_ptr; 

e compilare con c++ -std=c++11 -stdlib=libc++ .... Non ho idea del perché Clang stia usando libstdC++ di default; presumibilmente è per la compatibilità GCC.

Non è possibile trovare le pagine man perché libstdC++ non ha pagine man. Utile, non è vero? C'è documentazione HTML nella distribuzione di origine.

+0

Perfetto, grazie. – jww

+0

"Utile, non è vero" - vuol dire che siamo vecchi ???? – jww