如何在模板类中添加常见功能
How to add common functions to template classes?
我有两个模板类:
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
。(
根据L
和M
,我想添加一些添加到两个函数的成员功能。此功能需要访问L
和M
。(如何(这是可能的?
编辑:根据L
和M
的不同。L
和M
的组合将有不同的组合,有些将允许额外的成员功能和/或专门使用L
或M
的功能。
我尝试将其添加到B
中,并使A
成为B
的孩子。但是我没有想出更新m_ref
的A
的移动操作员。编辑:我通过将this
投射到B
找到了移动操作员。我仍然不喜欢这样,但是我解决了这个问题,因为解决了问题。
我考虑过将新成员功能添加到第三类模板C
,并同时使C
的儿童同时(A
和B
(。但是我无法想到一种提供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++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- Printf 命令不打印时添加了查找常见除数的新代码
- 如何在模板类中添加常见功能