Saya setuju dengan orang lain - itu meminta bentrokan nama, ambiguitas dan kemudian faktanya kurang eksplisit. Sementara saya bisa melihat penggunaanusing
, preferensi pribadi saya adalah untuk membatasi. Saya juga akan sangat mempertimbangkan apa yang beberapa orang tunjukkan:
Jika Anda ingin menemukan nama fungsi yang mungkin merupakan nama yang cukup umum, tetapi Anda hanya ingin menemukannya di std
namespace (atau sebaliknya - Anda ingin mengubah semua panggilan yang tidak ada dalam namespace std
, namespace X
, ...), lalu bagaimana Anda mengusulkan untuk melakukan ini?
Anda bisa menulis program untuk melakukannya, tetapi bukankah lebih baik menghabiskan waktu mengerjakan proyek Anda sendiri daripada menulis program untuk mempertahankan proyek Anda?
Secara pribadi, saya sebenarnya tidak keberatan std::
awalannya. Saya suka tampilan lebih daripada tidak memilikinya. Saya tidak tahu apakah itu karena itu eksplisit dan berkata kepada saya "ini bukan kode saya ... Saya menggunakan perpustakaan standar" atau jika itu adalah sesuatu yang lain, tapi saya pikir itu terlihat lebih bagus. Ini mungkin aneh mengingat bahwa saya baru saja masuk ke C ++ (digunakan dan masih melakukan C dan bahasa lainnya lebih lama dan C adalah bahasa favorit saya sepanjang masa, tepat di atas perakitan).
Ada satu hal lain meskipun agak terkait dengan hal di atas dan apa yang orang lain tunjukkan. Walaupun ini mungkin praktik yang buruk, saya terkadang memesan std::name
versi perpustakaan standar dan nama untuk implementasi spesifik-program. Ya, memang ini bisa menggigit Anda dan menggigit Anda dengan keras, tetapi semuanya berakhir saat saya memulai proyek ini dari awal, dan saya satu-satunya programmer untuk itu. Contoh: Saya overloadstd::string
dan menyebutnya string
. Saya memiliki tambahan yang bermanfaat. Saya melakukannya sebagian karena kecenderungan C dan Unix (+ Linux) saya terhadap nama huruf kecil.
Selain itu, Anda dapat memiliki alias namespace. Berikut adalah contoh di mana itu berguna yang mungkin belum dirujuk. Saya menggunakan standar C ++ 11 dan secara khusus dengan libstdc ++. Ya, itu belum lengkapstd::regex
dukungan . Tentu, itu mengkompilasi, tetapi itu membuat pengecualian di sepanjang garis itu menjadi kesalahan pada ujung programmer. Tetapi ini kurang implementasi.
Jadi, inilah cara saya menyelesaikannya. Instal Boost's regex, dan tautkan. Kemudian, saya melakukan yang berikut sehingga ketika libstdc ++ telah menerapkannya sepenuhnya, saya hanya perlu menghapus blok ini dan kode tetap sama:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
Saya tidak akan berdebat apakah itu ide yang buruk atau tidak. Namun saya akan berpendapat bahwa itu tetap bersih untuk proyek saya dan pada saat yang sama membuatnya lebih spesifik: Benar, saya harus menggunakan Boost, tetapi saya menggunakannya seperti libstdc ++ akhirnya akan memilikinya. Ya, memulai proyek Anda sendiri dan mulai dengan standar (...) di awal berjalan sangat jauh dengan membantu pemeliharaan, pengembangan, dan semua yang terlibat dengan proyek!
Hanya untuk memperjelas sesuatu: Saya sebenarnya tidak berpikir itu ide yang baik untuk menggunakan nama kelas / apa pun di STL dengan sengaja dan lebih khusus di tempat. String adalah pengecualian (abaikan yang pertama, di atas, atau kedua di sini, pun jika Anda harus) untuk saya karena saya tidak suka ide 'String'.
Karena itu, saya masih sangat bias terhadap C dan bias terhadap C ++. Menyimpan detail, banyak dari apa yang saya kerjakan cocok C lebih (tapi itu adalah latihan yang baik dan cara yang baik untuk membuat diri saya a. Belajar bahasa lain dan b. Usahakan jangan kurang bias terhadap objek / kelas / dll yang mungkin lebih baik dinyatakan sebagai kurang berpikiran tertutup, kurang arogan, dan lebih menerima.) Tapi apa yang berguna adalah apa yang sudah disarankan beberapa orang: Saya memang menggunakan daftar (ini cukup generik, bukan?), Dan mengurutkan (hal yang sama) untuk nama dua yang akan menyebabkan bentrokan nama jika saya harus melakukannya using namespace std;
, dan sebagainya untuk itu saya lebih memilih spesifik, dalam kontrol dan mengetahui bahwa jika saya bermaksud untuk menggunakan standar maka saya harus menentukannya. Sederhananya: asumsi tidak diizinkan.
Dan untuk membuat Boost's regex menjadi bagian std
. Saya melakukan itu untuk integrasi di masa depan dan - sekali lagi, saya akui sepenuhnya ini bias - saya pikir itu tidak seburuk itu boost::regex:: ...
. Memang, itu hal lain bagi saya. Ada banyak hal dalam C ++ yang masih harus saya terima sepenuhnya dalam penampilan dan metode (contoh lain: templat variadic versus argumen var [meskipun saya akui templat variadic sangat berguna!]). Bahkan mereka yang saya terima pun sulit, dan saya masih memiliki masalah dengan mereka.