[英]Interfacing with third-party public libraries/codes
我想用我的項目中可用的公共代碼評估算法。 我已經將算法所需的文件集成到我的項目中: kodtree.h
, kodtree.cpp
, pinpolyhedron.h
和pinpolyhedron.cpp
。 但是,編譯器抱怨模棱兩可的符號。 我將模棱兩可的變量名更改為其他名稱,並且編譯器毫無問題地對其進行了編譯。 這種方法看起來不像解決問題的一種優雅方法。
我當時在考慮使用namespace
但發現例如文件kodtree.h
具有多個extern
。
extern
將它們放入namespace
會不會給我帶來麻煩? namespace
是正確的方法嗎? kodtree.h
, kodtree.cpp
, pinpolyhedron.h
和pinpolyhedron.cpp
)放入該類並將它們pinpolyhedron.cpp
私有? 我將不勝感激任何提示。
使用名稱空間是正確的方法嗎?
是的,但不是您嘗試執行此操作的方式。 庫應該適當地為其自身命名空間,但有時由於各種原因它們不能或不可以。 最好保留它們,除非您打算圍繞庫代碼編寫一個完整的包裝器。
我們總是可以施加一點紀律,並為我們自己的代碼命名空間。 簡而言之,我們可以在我們自己的每個源文件中執行以下操作1 :
#include <some_library.h>
#include <my_other_project_header.h>
namespace ProjectName { namespace ModuleName {
// Your code here
}}
這樣,您的代碼就可以很好地與所包含的內容隔離。 除非有任何extern "C"
事物,否則不應有沖突。 無論庫頭拖動到什么位置,都不會與您在命名空間內編寫的代碼發生沖突。 一直以來,您的代碼可以引用最多具有一個限定級別的項目實體( Module1
代碼可以引用Module2::Foo
,或者可以將Module1::Bar
簡稱為Bar
)。 除此之外,您始終可以通過完全限定事物或使用使用聲明來引用Project
命名空間之外的事物。
1:如果您的編譯器支持C ++ 17,它可能會更美味:
namespace ProjectName::ModuleName {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.