【问题标题】:c++ template argument deduction from another argumentc ++模板参数从另一个参数推导
【发布时间】:2020-08-04 18:08:38
【问题描述】:

我在我的代码中使用pimpl模式,所以对于每个类X,都会有一个对应的impl类XImpl

假设我们有AAImplBBImplCCImpl,其中ABC 是类似的类,我想为他们编写一些模板函数。

template <typename T, typename TImpl>
std::shared_ptr<const T> GetObjectById(int id);

这个函数是通过它的id查询Object(类型可以是ABC)。在函数定义中,我确实需要同时使用TTImpl

用户会这样使用这个功能:

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


    【解决方案1】:

    你的意思是以下吗?

    template <typename T, typename TImpl = typename T::impl>
    std::shared_ptr<const T> GetObjectById(int id);
    

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 2021-08-31
      • 2011-08-28
      • 2013-06-30
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多