2017-04-17 4 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 function(kontainer 3D) - > decltype(0 + 3D [0]){} しかし、それは動作していないようです。 – Nane

答えて

1

この情報を提供するすべてのSTLコンテナにはtypedefがあります。もちろん、そのタイプを印刷することを忘れることはできますが、それを使うことができます。 (play RTTI games to print the name of the typeでも構いませんが、コンパイラに依存していて、それが悪い設計の指標であることが必要です)。だから、

、あなたが持っている場合:

std::deque<int> myArray; 

を、あなたがタイプintのものであろう

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

、今one_elementを使用することができます。

一方、あなたはこのようにその情報を抽出するためにmyArray自体を使用することができます。

decltype(myArray)::value_type one_element; 

と再び、one_elementはタイプintです。

編集:私は問題を理解しているかどうかはわかりません。しかし、あなたは、これは3Dコンテナで、次のように最も深い要素の型を抽出できること確認している場合:

お持ちの場合:

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

その後、

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

になりますタイプはintです。これを3Dでない配列で使用すると、コンパイルされません。

+0

私は、3Dコンテナを受け取り、3Dコンテナに含まれるものと同じ型を返す汎用関数を持っているとします。たとえば、私の関数は次のようになります: 'テンプレート' 'declutype(0 + Knt [0]){' //ランドームコード '' decltype(0 + Knt [ 0])K; ' '//ランドームコード' 'return K;' '}' これは問題ありませんか?これは使えますか? – Nane

+0

@ネーン2つのこと:1.これをあなたの質問に追加してください、私はここで理解できません。 2. "これはうまくいく"と尋ねる前に試してみて、それがうまくいかないかどうかについて質問してください。 –

+0

私はそれを加えました。私はあなたを気にして申し訳ありませんが、これは基本的にどのように私の関数(単純化)のように見える、私はそれを事前に試してみましたが、コンパイラはエラー(これらの多くは、この部分にいくつかのポイント)これを行うための適切な方法であるかどうか、または私が以前にそれを使用したことがないので私が間違いを犯したかどうかを知るために、その使用についての私の知識は少し不安です。怠惰にならないように、私は初心者です。 – Nane

関連する問題