如何找出3D容器的元素类型?

时间:2017-04-17 19:16:58

标签: c++ multidimensional-array return-value decltype

如果我有一些3D容器,可以是任何包含类型的组合。 我必须编写一个通用函数来接收这个容器作为参数,并且必须返回一个与3D容器元素类型相同的2D容器(矩阵)。

例如,收到的3D容器:

std::vector<std::deque<std::deque<int>>> 3D;

返回的类型:

std::deque<std::deque<int>>

如何实现这一点,并使返回类型通用并依赖于已收到的多维容器? 假设我有一个接收3D容器的通用函数,并且必须返回与3D容器包含的相同类型。例如:我的功能是这样的:

template<typename 3D>  
 auto Function(3D Knt)-> decltype(0+Knt[0]){
// randome code
decltype(0+Knt[0]) K;
// randome code
return K;
}

这会导致任何错误吗?

1 个答案:

答案 0 :(得分:1)

所有STL容器中都有namedGeometry可以为您提供该信息。当然,您可以忘记打印该类型,但您可以使用它。 (你可以play RTTI games to print the name of the type,但它依赖于编译器,并要求这是一个糟糕设计的指标。)

所以,如果你有:

typedef

然后你可以使用

std::deque<int> myArray;

现在std::deque<int>::value_type one_element; 的类型为one_element

另一方面,您可以使用int本身来提取这样的信息:

myArray

再次,decltype(myArray)::value_type one_element; 的类型为one_element

编辑:我不确定我是否理解这个问题。但如果您确定这是一个3D容器,那么可以按如下方式提取最深的元素类型:

如果你有:

int

然后

std::vector<std::vector<std::vector<int> > > 3dArray;

的类型为decltype(3dArray)::value_type::value_type::value_type one_element; 。如果你在不是3D的数组上使用它,它将无法编译。

相关问题