2017-04-17 30 views
0

如果我有一些3D容器,它可以是任何包含類型的組合。 我必須編寫一個通用函數,它接收此容器作爲參數,並且必須返回與3D容器的元素類型相同的2D容器(矩陣)。如何找出我的3D容器的元素是什麼類型?

對於expample,在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

標準容器爲此目的聲明一個成員'value_type'類型。 – VTT

+0

我很困惑:你似乎知道'decltype',所以你應該能夠工作如何獲得類型。 – Rakete1111

+0

Yess,我知道它,但我不知道如何定位元素或3D容器元素的元素。我試過這樣:auto函數(kontainer 3D) - > decltype(0 + 3D [0]){} 但它似乎並不工作 – Nane

回答

1

在所有STL容器中都有一個typedef爲您提供該信息。當然,你可以忘記打印這種類型,但你可以使用它。 (你可以play RTTI games to print the name of the type,但它是編譯器相關的,並且要求這是壞設計的一個指標)。

所以,如果您有:

std::deque<int> myArray; 

那麼你可以使用

std::deque<int>::value_type one_element; 

現在one_elementint類型。

在另一方面,你可以使用myArray自身提取的信息是這樣的:

decltype(myArray)::value_type one_element; 

,並再次,one_elementint類型。

編輯:我不知道我理解這個問題。但如果你肯定,這是一個3D的容器,然後最深的元素類型可以提取如下:

如果您有:

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

然後

decltype(3dArray)::value_type::value_type::value_type one_element; 

會類型爲int。如果你在一個不是3D的數組上使用它,它將不會編譯。

+0

可以說,我有一個通用函數來引入3D容器,並且必須返回3D容器包含的相同類型。例如:我的功能是這樣的: 'template ' 'auto Function(3D Knt) - > decltype(0 + Knt [0]){' '// randome code' 'decltype(0 + Knt [ 0])K;' '// randome code' 'return K;' '}' 這樣好嗎?這會工作嗎? – Nane

+0

@Nane兩件事:1.添加到您的問題,我不明白在這裏。 2.在詢問「這項工作是否成功」之前嘗試一下,並在問題沒有時詢問問題,而不是問題是否會奏效。 –

+0

我加了。我很抱歉打擾你,這基本上是我的函數看起來像(簡化),我也事先嚐試過,但編譯器報告錯誤(其中很多,並指出這部分),我只是想要知道這是否是一個正確的方法來做到這一點,或者如果我犯了一個錯誤,因爲我以前從未使用過它,並且我的使用知識有點不穩定。不要懶惰,我只是一個初學者。 – Nane

相關問題