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;
  ...
};

那么如果你的 class_b 使用 std::list 实例化,例如:

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

那么你的 arr 最终会变成 std::vector<char>

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