Czy korzystanie z std::tr1::shared_ptr
jest zgodne z prawem i dobrym stylem programowania jako std::shared_ptr
umieszczając dyrektywę using
w odpowiednim nagłówku? W ten sposób:Czy umieszczanie pliku tr1 :: shared_ptr w przestrzeni nazw w nagłówku jest legalne?
namespace std
{
using tr1::shared_ptr;
}
Wiem, że zanieczyszczanie całego obszaru nazw jest złe, ale co z tą sprawą? Czy są jakieś ukryte pułapki? Docelowym kompilatorem jest VS2008, ale pożądana jest również kompatybilność z nowszymi wersjami.
[Późniejsze wersje powinny również obsługiwać 'std :: tr1'] (http://stackoverflow.com/a/2002972/241631). Kompilatory nie zrzutu całego obszaru nazw; będą kopiować rzeczy z tego na 'std', tak jak próbujesz to zrobić. Odwoływanie się do typu jako 'std :: tr1 :: shared_ptr' nie powinno być problemem przez długi czas. – Praetorian
@cassini Co powiedział pretorian^Jeśli chciałbyś pójść swoją trasą, musiałbyś przeprowadzić kontrole kompilatora w preprocesorze, aby upewnić się, że nie pojawią się konflikty w obsłudze C++ 11 i przyszłych kompilatorach, które są niechlujne i nie jest to elastyczne i nie tak przenośne. – leetNightshade
@leetNightshade Właściwie to wszystko powyższe. Oczywiście, niestety nie ma opcji "kompilator obsługuje funkcję X", ale dla większości celów powinno wystarczyć proste sprawdzenie preprocesora dla wersji C++. –