我有一些的3rdParty庫這樣的方法:隱藏可變參數模板實施
bool Invoke(const char* method, Value* args, size_t nargs)
它需要其內類型的數組(可轉換至任何原語C++類型)和Arg計數作爲其內PARAMS。 在我的代碼,我寫了一些通用的輔助,以避免每個調用手動創建和類型的皈依:
template<class ... Args>
bool WrappedValue::Invoke(const char* method, Args&& ... args)
{
3rdParty::Value values[] =
{
3rdParty::Value(std::forward<Args>(args))...
}
return m_value.Invoke(method, values, sizeof ... (Args));
}
它工作得很好,但現在我要在我的頭文件中定義的3rdParty代碼和lib直接連接到我的主要項目。
是否可以隱藏該第三方庫的實現細節和用法? (使用某種疙瘩成語或代理對象3rdParty ::價值)。我知道無法在C++中使用虛擬模板方法來創建代理或僅將模板實現移動到.cpp,因此我完全停留在這個問題上。
將是任何幫助感激)
你的第二個方法公開的3rdParty API,即'的3rdParty :: Value'在實際'的invoke()'調用,其中OP希望避免。 – Walter
@Walter第一種方法隱藏調用者的第三方API,第二種方法本身。我不確定OP是想要的;這是「主要項目」。所以我包含了兩個選項。 – Yakk