我正在学习一些模板编程,对此我很陌生。我想要实现的是一些包含 STL 容器的 CRTP 类。让我们class A{};
作为(编译时)基类的示例,在编译时遵循 CRTP 样式从该基类“派生”class B{};
和“派生”。class C{};
现在两者都B
将C
包含容器。为了示例的目的,让它分别为 astd::vector
和 a std::set
。现在,我想通过 abegin()
和一个end()
公开前向迭代器的函数公开这些迭代器。但是,我不想暴露里面的确切容器是什么B
,C
并且我想为 定义这些函数A
,以便在调用时正确的一个用于B
并被C
使用。
这可能吗 ?现在我的计划是有一个Iterator
内部类,它将包含(B
视C
情况而定的向量或集合)的实际迭代器并将调用委托给它。然而,这似乎是很多复制的胶水代码,我怀疑有更好的选择。
我有一些问题:
如何在 中声明内部 clases
A
,以便它与 CRTP 很好地配合B
。C
我需要为 和 复制A
它B
吗C
?它可以是一个空类,我用专门的实现A
将它们掩盖起来吗?B
C
如何使用更少的胶水和更少的重复来公开迭代器?
我不想与外部库(如 boost)创建依赖关系,并且只想坚持使用 std。所以我必须自己实现我需要的任何额外功能。感谢所有的帮助。