前綴考慮這個代碼(或live example):爲什麼有些升壓功能不需要命名空間
#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;
}
爲什麼功能add_edge
,make_iterator_range
,vertices
,degree
和adjacent_vertices
是來自Boost庫工作不命名空間前綴boost::
?
最令我費解的是,根據情況,有時候實際需要前綴。 Here is an example,如果使用不同的圖形結構會導致編譯錯誤,可以通過在前綴boost::make_iterator_range
前修復該錯誤。
我看了一下週圍的BGL documentation,但沒有發現任何關於這個問題。是我的錯,還是一些BGL標題污染了全局命名空間?這是設計還是這是一個錯誤?
參數依賴查找(ADL),又名Koenig查找(在Andrew Koenig之後)。 –
我重新打開這個問題,因爲有人可能想詳細解釋,爲什麼鏈接的代碼不能編譯 –
儘管ADL有其他問題(這些問題很難找到,特別是沒有搜索術語ADL),這是一個非常好問的問題。可以改進的主要原因是所有的命名空間都會發生這種情況,而不是Boost,但是我可以通過不點擊來嘗試。 – chris