У меня есть два класса шаблонов, псевдокод:
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
. Так что я мог бы быть другим,но b.m_ref
ссылается на a.m
.)
В зависимости от L
и M
, я хочу добавить некоторые функции-члены, которые добавляются к обеим функциям.Для этих функций необходим доступ к L
и M
. (как) это возможно?
edit: Подчеркните зависимость от L
и M
.Будут разные комбинации L
и M
, и некоторые из них позволяют использовать дополнительные функции-члены и / или специализируются на использовании функций L
или M
.
Я пытался добавить этидо B
и сделал A
ребенка B
.Но мне не удалось придумать оператор перемещения для A
, который обновляет m_ref
. edit: я нашел оператора перемещения, приведя this
к B
.Мне все еще не нравится это, но я подошел близко к этому вопросу, так как проблема решена.
Я думал о добавлении новой функции-члена в шаблон третьего класса C
и создании обоих (A
и B
) дети C
.Но я не смог придумать способ дать ссылку на M
.CRTP, кажется, не подходит, поскольку только L
и M
должны быть параметрами шаблона C
.