我想从另一个使用基于第一个类的模板的类中获取类模板的类型名。
我写了一个这样的类:
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
。别名。然而,这是最简单的解决方案,除非您有某些特定原因不这样做。
关于C++ - 获取模板的类型名称,其中该类用作另一个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65029968/