我有一些的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