ile önek gerekmez Neden:bazı Boost fonksiyonları bu kodu (veya <a href="https://ideone.com/dY6Gru" rel="nofollow">live example</a>) düşünün ad
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/range/iterator_range.hpp>
using std::cout;
int main() {
boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> g;
add_edge(0, 1, g);
add_edge(1, 2, g);
for(auto v : make_iterator_range(vertices(g))) {
cout << v << " has " << degree(v, g) << " neighbor(s): ";
for(auto w : make_iterator_range(adjacent_vertices(v, g))) cout << w << ' ';
cout << '\n';
}
return 0;
}
Neden fonksiyonları add_edge
, make_iterator_range
olmadan Boost kütüphane işten gelip vertices
, degree
ve adjacent_vertices
boost::
ad alanı öneki?
Bana göre en şaşırtıcı olan şey, duruma bağlı olarak, aslında önekin bazen gerekli olmasıdır. Here is an example, farklı bir grafik yapısı kullanıldığında, boost::make_iterator_range
önekiyle giderilebilen bir derleme hatasıyla sonuçlanır.
BGL documentation'un çevresine biraz baktım, ancak bu sorunla ilgili hiçbir şey bulamadım. Bu benim hatam mı yoksa küresel isim alanını kirleten bazı BGL başlıkları mı? Bu tasarım gereği mi yoksa bu bir böcek mi?
Bağımsız değişken arama (ADL), a.k.a. Koenig araması (Andrew Koenig'den sonra). –
Bu soruyu yeniden açıyorum çünkü birisi ayrıntılı olarak açıklamak isteyebilir, neden bağlantılı kodun derlenmediği –
ADL ile ilgili başka soruların olmasına rağmen (özellikle ADL terimini aramadan bulmak zor olan) çok iyi bir soru. İyileştirilebilecek en önemli şey, bunun Boost yerine tüm ad alanlarıyla gerçekleşmesidir, ancak bunu denemek için tıklamamıza bakabilirim. – chris