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

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

我写了一个这样的类:

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,因此如果我们将 更改typedefvalue_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;
  ...
};

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

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

那么你的arr意志最终会成为std::vector<char>

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


以上是C++-获取模板的类型名,其中该类用作另一个模板的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>