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

标签 c++ templates c++17 typename

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

我写了一个这样的类:

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将使用 std::list 实例化,例如:

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

然后是你的arr最终会是 std::vector<char> .

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

关于C++ - 获取模板的类型名称,其中该类用作另一个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65029968/

相关文章:

c++ - 检测派生类中是否已重新定义 C++ 虚函数的方法

c++派生基类Friend函数访问Parent上的private?

c++ - 解析器帮助程序不工作

c++ - 如何显式实例化具有友元函数嵌套类的模板类 (C++)

c++ - 带有模板参数的部分专用模板

c++ - #include 模板递归

c++ - 使用模板特化拆分可变参数包

c++ - 在匿名命名空间中定义全局 constexpr 变量与使它们内联一样吗?

c++查找字符串中存在的元素的 vector

c++ - 在 OSX 中使用带有 taglist 和 ctags 的 vim