C++ 如何向模板类添加公共函数?
我有两个模板类,伪代码:C++ 如何向模板类添加公共函数?,c++,templates,C++,Templates,我有两个模板类,伪代码: 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) {} // +c
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
}
模板
甲级
{
L;//可复制
M;//仅可移动
}
模板
B类
{
L;
M&M_参考;
B(A&A,外部参数ep)
:l(a.l.子集(ep))
,m(a.m){}
//+复制和移动构造函数和运算符
}
(这里的想法是使用B
作为A
部分的引用。因此l可能不同,但是B.m\u ref
引用了A.m
)
根据L
和M
,我想添加一些添加到这两个函数中的成员函数。此功能需要访问L
和M
。
(如何)这是可能的?
编辑:根据L
和M
突出显示。L
和M
将有不同的组合,一些组合允许额外的成员功能和/或专门使用L
或M
的功能
我试图将这些添加到B
,并使A
成为B
的孩子。但是我没有为A
找到一个移动操作符来更新muref
。
编辑:我通过将this
强制转换为B
找到了移动操作符。我仍然不喜欢这个,但我接近了这个问题,因为问题已经解决了
我考虑将新成员函数添加到第三类模板
C
,并使(a
和B
)都成为C
的子类。但是我想不出一种方法来提供对M
的引用。CRTP似乎不合适,因为只有L
和M
应该是C
的模板参数。听起来您误解了CRTP的功能。模板库可以有L
和M
作为参数
// 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) {}
}
//基本模板
模板
C类
{
};
//某对L,M的部分特化
模板
C类
{
};
模板
A类:公共C类
{
L;//可复制
M;//仅可移动
}
模板
B类:公共C类
{
L;
M&M;
B(A&A,外部参数ep)
:l(a.l.子集(ep))
,m(a.m){}
}
我不理解你关于CRTP的理由。似乎CRTP可以在这里完成这项工作。只需将getL
/getM
函数放入A
和B
,CRTP应该调用这些函数来获取L
和M
“为什么L
和M
应该是C
的模板参数?”C
可以访问l
和m
@Caleth我需要专门研究C
的不同组合l
和m
。我想确定的是,A
和B
调用相同的逻辑,在C
中具有相同的功能。