【发布时间】:2020-08-04 18:08:38
【问题描述】:
我在我的代码中使用pimpl模式,所以对于每个类X,都会有一个对应的impl类XImpl
假设我们有A、AImpl、B、BImpl、C、CImpl,其中A、B、C 是类似的类,我想为他们编写一些模板函数。
template <typename T, typename TImpl>
std::shared_ptr<const T> GetObjectById(int id);
这个函数是通过它的id查询Object(类型可以是A或B或C)。在函数定义中,我确实需要同时使用T 和TImpl。
用户会这样使用这个功能:
auto a = GetObjectById<A, AImpl>(1);
auto b = GetObjectById<B, BImpl>(2);
auto c = GetObjectById<C, CImpl>(3);
如您所见,对于T 的每种类型,TImpl 始终绑定到它。所以我想把它的用法简化为
auto a = GetObjectById<A>(1);
auto b = GetObjectById<B>(2);
auto c = GetObjectById<C>(3);
更重要的是,这可以从用户端隐藏AImpl。
是否有将第二个参数绑定到第一个参数?即第二个参数不参与参数推导,它是由我定义的一些映射关系指定的。
【问题讨论】:
标签: c++ templates template-argument-deduction pimpl-idiom