如果我有一些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;
}
这会导致任何错误吗?
答案 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的数组上使用它,它将无法编译。