繁体   English   中英

C++ - 获取模板的类型名,其中 class 用作另一个模板

[英]C++ - Get typename of a template where that class is used as another template

我想从另一个 class 获取 class 模板的类型名,该模板使用基于第一个 class 的模板。

我写了一个 class 像这样:

template<typename T>
class class_a {
  ...
}

我想做一些事情:

template<class class_a>
class class_b {
  std::vector<class_a.T> arr;
  ...
}

最简单的方法是让你的模板相互“合作”,并让class_a “帮助”另一个模板:

template<typename T>
class class_a {

public:
   typename T type_t;
};

接着:

template<class class_a>
class class_b {
  std::vector<typename class_a::type_t> arr;
  ...
};

您会发现这是 C++ 库本身中非常标准的设计模式。 例如,大多数 C++ 容器都定义了value_type ,所以如果我们将typedef更改为value_type

template<typename T>
class class_a {

public:
   typename T value_type;
};

接着:

template<class class_a>
class class_b {
  std::vector<typename class_a::value_type> arr;
  ...
};

然后,如果要使用std::list实例化您的class_b ,例如:

class_b<std::list<char>> b;

然后你的arr将最终成为std::vector<char>

不需要这种“合作”的替代方法是使用具有专业化的帮助模板,以避免必须显式声明typedef别名。 然而,这是最简单的解决方案,除非您有特定的理由不这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM