【发布时间】:2020-04-17 14:10:00
【问题描述】:
前几天,我向similar question 询问了有关嵌套向量的问题,但我遇到了另一个让我难过的问题。我需要在编译时获取嵌套向量的最内层类型,以便可以使用它作为模板参数传递。
例如,如果我有这个嵌套向量:
std::vector<std::vector<std::vector<int>>> v;
我需要一种方法来提取int,这样我就可以调用一个函数,该函数接受一个嵌套向量并处理这样的元素:
foo<int>(v);
除了要注意的是,这个函数应该能够处理任何深度、任何类型的嵌套向量。当我调用foo 时,我希望自动为我推断出内部类型。
所以也许调用看起来像这样:
foo<inner_type_t<v>>(v);
其中inner_type_t 是某种形式的递归模板,当给定v 时,它会解析为int。
我认为解决方案与其他问题的解决方案相似,但我无法解决...在递归模板方面我还是个新手。
编辑:
这是我目前所拥有的......
template <typename T>
struct inner_type
{
using type = T;
};
template <typename T>
struct inner_type<std::vector<T>>
{
using type = inner_type<T>;
};
int main()
{
std::vector<std::vector<int>> v = {
{ 1, 2}, {3, 4}
};
std::cout << typeid(inner_type<decltype(v)>::type).name();
}
输出:
struct inner_type<class std::vector<int,class std::allocator<int> > >
【问题讨论】:
-
到目前为止你尝试过什么?大多数
whatever_t类型是通过使用成员type和template <typename T> using whatever_t = typename whatever<T>::type;创建结构whatever来创建的。 -
我在尝试解决问题时添加了问题。
-
另一种选择是跟随vector的
value_type,如果没有value_type则停止。
标签: c++ templates c++14 template-meta-programming