如何在模板类中添加常见功能

How to add common functions to template classes?

本文关键字:添加 常见 功能      更新时间:2023-10-16

我有两个模板类:

template<class L, class M>
class A
{
  L l; // copyable
  M m; // only moveable
}
template<class L, class M>
class B
{
  L l;
  M& m_ref;
  B(A& a, ExtraParameter ep)
    : l(a.l.subset(ep))
    , m(a.m) {}
  // +copy and move constructors and operators
}

(此处的想法是使用B的参考文献A'S。S。S。因此L可能是不同的,但是b.m_ref参考a.m。(

根据LM,我想添加一些添加到两个函数的成员功能。此功能需要访问LM(如何(这是可能的?

编辑:根据LM的不同。LM的组合将有不同的组合,有些将允许额外的成员功能和/或专门使用LM的功能。

我尝试将其添加到B中,并使A成为B的孩子。但是我没有想出更新m_refA的移动操作员。编辑:我通过将this投射到B找到了移动操作员。我仍然不喜欢这样,但是我解决了这个问题,因为解决了问题。

我考虑过将新成员功能添加到第三类模板C,并同时使C的儿童同时(AB(。但是我无法想到一种提供M的参考的方法。CRTP似乎不合适,因为仅LM应该是C的模板参数。

这听起来好像您误会了CRTP可以做什么。模板基础可以将LM作为参数

// base template
template <class AorB, class L, class M>
class C
{
};
// partial specialisation for some pair of L, M
template <class AorB>
class C<AorB, int, std::string>
{
};
template<class L, class M>
class A : public C<A, L, M>
{
  L l; // copyable
  M m; // only moveable
}
template<class L, class M>
class B : public C<B, L, M>
{
  L l;
  M& m;
  B(A& a, ExtraParameter ep)
    : l(a.l.subset(ep))
    , m(a.m) {}
}