Başkalarına katılıyorum - isim çatışmaları, belirsizlikler istiyor ve gerçek şu ki daha az açık. Ben kullanımını görebilirken, using
kişisel tercihim bunu sınırlamak. Ayrıca bazılarının dikkatini çekenleri de dikkate alacağım:
Eğer oldukça yaygın isim olabilecek bir işlev adı bulmak istiyorum, ama sadece bunu bulmak istiyorsanız std
ad (veya ters - sen tüm çağrıları değiştirmek istiyorum değil ad std
, ad X
, ...), o zaman bunu nasıl yapmayı öneriyorsun?
Bunu yapmak için bir program yazabilirsiniz, ancak projenizi sürdürmek için bir program yazmak yerine, projenizin üzerinde çalışmak için zaman harcamak daha iyi olmaz mıydı?
Şahsen, aslında std::
öneki önemsemiyorum . Görünüşe sahip olmamaktan çok hoşlanıyorum. Bunun açık ve bana "bu benim kodum değil ... Ben standart kütüphane kullanıyorum" ya da başka bir şey olup olmadığını söylüyor, çünkü bilmiyorum ama daha güzel görünüyor düşünüyorum. Bu son zamanlarda C ++ 'a girdiğim için garip olabilir (C ve diğer dilleri daha uzun süre kullanıyorum ve hala yapıyorum ve C, tüm zamanların en sevdiğim dilidir, derlemenin hemen üstünde).
Yukarıdakilerle ve diğerlerinin işaret ettiği şeyle ilgili olmasına rağmen başka bir şey daha var. Bu kötü bir uygulama olsa da, bazen std::name
programa özel uygulama için standart kütüphane sürümü ve adı için ayırırım. Evet, bu gerçekten sizi ısırıp sert bir şekilde ısırırdı, ama hepsi bu projeyi sıfırdan başlattığımdan kaynaklanıyor ve bunun için tek programcıyım. Örnek: Aşırı yüklüyorum std::string
ve çağırıyorum string
. Yararlı eklemelerim var. Kısmen C ve Unix (+ Linux) küçük harfli isimlere olan eğilimim nedeniyle yaptım.
Bunun yanı sıra, ad alanı takma adlarınız olabilir. İşte size atıfta bulunulmamış olabileceği faydalı bir örnek. C ++ 11 standardını ve özellikle libstdc ++ ile kullanıyorum. Tam bir std::regex
desteği yok. Elbette derler, ancak programın sonunda bir hata olduğu satırları boyunca bir istisna atar. Ancak uygulama eksikliği.
İşte böyle çözdüm. Boost's regex yükleyin ve bağlayın. Sonra, libstdc ++ tamamen uygulandığında, ben sadece bu bloğu kaldırmak gerekir ve kod aynı kalır:
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;
}
Bunun kötü bir fikir olup olmadığını tartışmayacağım. Ben ancak için temiz tutar olduğunu iddia edecektir benim proje ve aynı zamanda belirli yapar: Doğru, ben kullanım Boost zorunda ama ben libstdc gibi kullanıyorum ++ eninde sonunda olacaktır. Evet, kendi projenizi başlatmak ve başlangıçta bir standart (...) ile başlamak, bakım, geliştirme ve projeyle ilgili her şey için çok uzun bir yol kat ediyor!
Sadece bir şeyi açıklığa kavuşturmak için: Aslında bir sınıfın adını / STL'de kasten ve daha spesifik olarak yerine kullanmanın iyi bir fikir olduğunu düşünmüyorum . 'String' fikrini beğenmediğim için dize benim için istisnadır (ilk, yukarıda veya ikinciyi burada görmezden gelin, pun).
Olduğu gibi, hala C'ye karşı önyargılıyım ve C ++ 'a karşı önyargılıyım. Dikkat çeken ayrıntılar, üzerinde çalıştığım şeylerin çoğu C'ye daha fazla uyuyor (ama kendimi bir başka dil öğrenmek ve b. Daha iyi ifade edilen nesneye / sınıflara / vb. daha az kapalı fikirli, daha az kibirli ve daha kabul edicidir.). Ama ne olduğunu ben yapmak için sanki bir isim çatışması neden olur adına iki (aynı şey) sıralamak ben gerçekten listesini kullanın yoktur ve (, oldukça jenerik değil mi edilir?): Kullanışlı bazıları zaten önerilen budur using namespace std;
ve bu yüzden bu amaçla spesifik olmayı, kontrolde olmayı ve standart kullanım olmayı planlıyorsam, bunu belirtmem gerektiğini bilmek istiyorum. Basitçe söylemek gerekirse: varsayım yok.
Ve Boost'un normal ifadesinin bir parçası haline gelmeye gelince std
. Bunu gelecekteki entegrasyon için yapıyorum ve - yine, bunun tamamen önyargı olduğunu itiraf ediyorum - bunun kadar çirkin olduğunu düşünmüyorum boost::regex:: ...
. Gerçekten, bu benim için başka bir şey. C ++ 'da hala görünüşte ve yöntemlerde tam olarak kabul etmek için gelmediğim pek çok şey var (başka bir örnek: varadik şablonlar var değişkenlere karşı [ben varadik şablonları çok çok yararlı olduğunu itiraf ediyorum!]). Kabul ettiğim kişiler bile zor oldu ve hala onlarla ilgili sorunlarım var.