2015-10-22 48 views
-1

我有一個使用類從另一個庫庫(DLL)什麼是暴露內部類到公共API的最佳方式?

//DLL External library API: Foo library 
namespace foo{ 
class Component(Elemement e) { 
... 
} 
} //foo namespace 

現在我的圖書館需要使用foo的DLL和使用它的一些功能和類,但沒有露出富庫類型,但有些「翻譯」

// my developed library "Core" 
namespace core{ 
class Component(Element e){ 
... 
} 
} 

的公共API將公開級核心::零組件及核心::元,但實際上這些應該是直接翻譯給foo的::零組件和Foo ::元素。想象一下,這個翻譯需要完成許多其他需要被包裝暴露的類。 什麼是最好的處理方法?

+0

你是什麼意思,當你寫「翻譯」? –

+0

我需要一個class core ::與foo :: Element非常相似的元素,我只是不想暴露foo類而只是一個wapper。在這種情況下,包裝只是爲了隱藏基礎類不在我的庫中開發,但在外部庫(foo) 有什麼竅門要做?像typedefs,或使用(在C + + 11)? – FCR

+1

如果它是*相同*,爲什麼要隱藏它? –

回答

1

using指令你在找什麼?

namespace foo { 
    class A {}; 
} 

namespace core { 
    using foo::A; 
} 

// use like 
core::A a; 
+0

如果類A具有方法getValue()和setValue(),例如,我的庫的最終用戶將如何看到這些?如果我使用你的解決方案並且不公開foo庫中的頭文件,怎麼可能? – FCR

+1

@FCR,如果你不想複製它們,你將不得不公開庫標題。 – Petr

+0

謝謝,如果Foo庫(和頭文件)包含很多其他公共類,我不希望客戶使用它們。因爲我希望客戶使用Foo庫,但通過我的Core庫,通過運送Foo頭文件和庫,我讓用戶使用Foo的全部功能,避免使用我的Core庫,對嗎?是否有可能隨後發送Foo所有標題的子集? – FCR

相關問題