继承依赖类型定义而不使用结构
Inherit dependent typedef without using struct
我有一些这样的代码:
#include <string>
#include <map>
typedef std::less<std::string> Comparator; // simplified
typedef std::allocator<std::pair<const std::string, int>> Allocator; // simplified
template<class T>
struct Base
{
typedef std::map<std::string, T, Comparator, Allocator> type; // VERY long declaration in the actual code
};
template<class T>
struct Container : public Base<T>::type
{
Container(Allocator a) : Base<T>::type(Comparator(), a) {}
};
int main()
{
Allocator a;
Container<int> c(a);
}
尽管声明在我的实际代码中更花哨一些。
使用Base结构,这样我就不必多次编写长映射声明。
我想知道是否有更好的方法可以在没有任何Base结构的情况下从地图继承?
请不要使用宏。我希望以某种方式将 typedef 隐藏在容器类本身或类似的东西中。
谢谢
您可以依赖具有注入类名的模板。在map<...>
的专业化内部,目前的专业化可以简单地用map
来指代。并且该注入的类名也可用于派生类(和类模板(。但由于它是依赖的,因此需要一个限定名称。它看起来比听起来简单,以下是将别名滚动到Conatiner
的方法:
template<class T>
struct Container : public std::map<std::string, T, Comparator, Allocator>
{
using Base = typename Container::map;
Container(Allocator a) : Base(Comparator(), a) {}
};
Container::map
是注入的类名。别名抓住它以方便使用。
相关文章:
- C++ 类/结构中的函数依赖属性
- 如何在不添加对库的依赖的情况下添加与库结构的兼容性
- 循环依赖结构,使用前向声明时结构的错误重定义
- 继承依赖类型定义而不使用结构
- 代表软件包安装和系统依赖关系的最佳数据结构
- 具有模板专用化的复合结构中的循环依赖关系
- C++对类/结构中定义的公共别名(typdef/using)的循环依赖
- 使用依赖于 "this" C++ 的比较结构初始化集合
- 在创建C 枚举和依赖数据结构时,如何避免重复自己
- 相互依赖的结构声明
- 当存在许多相互依赖的项目时,Visual C++中的文件夹结构
- 表示功能依赖关系的数据结构
- 对于没有填充的结构,依赖sizeof是多么的便携
- c++中定义上下文和实例化点之间对非依赖结构的解释差异
- 模板中依赖于模板类型的结构的专业化
- 如何查看是否解决了所有数据结构依赖项
- 被视为依赖作用域的函数模板的函数作用域结构体的静态成员函数
- 层次结构类依赖关系
- 如何解决结构对其他结构类型的循环依赖,在头文件库中定义(c++)
- 初始化C/ c++结构体的const成员…依赖于编译器的