変換std::vector<>::反復子です。純インターフェースC++/CLIを起動します。
-
01-07-2019 - |
質問
私はラッピングするネイティブのC++クラスライブラリは、以下のいずれかの方法が
class Native
{
public:
class Local
{
std::string m_Str;
int m_Int;
};
typedef std::vector<Local> LocalVec;
typedef LocalVec::iterator LocalIter;
LocalIter BeginLocals();
LocalIter EndLocals();
private:
LocalVec m_Locals;
};
1)は".純way"の代表の方にもこのようなインターフェイス?単一の方法を返す配列<>?の配列<>汎用いて反復子は、その実施BeginLocals()およびEndLocals()?
2)地域に宣言されて 価値構造体 できます。純のラッパー?
のように包まれたシェイクスピアの"マクベス".純味が、私は非常に新しい管理の世界は、こうした情報も、googleの...
解決
反復子は、なtranslatableる"。純way"で約換IEnumerable < T>IEnumerator < T>.
よ
vector<int> a_vector;
vector<int>::iterator a_iterator;
for(int i= 0; i < 100; i++)
{
a_vector.push_back(i);
}
int total = 0;
a_iterator = a_vector.begin();
while( a_iterator != a_vector.end() ) {
total += *a_iterator;
a_iterator++;
}
まさ(クライアントまで、フルのc#)
List<int> a_list = new List<int>();
for(int i=0; i < 100; i++)
{
a_list.Add(i);
}
int total = 0;
foreach( int item in a_list)
{
total += item;
}
以上に明示的に(が隠れることなく、IEnumeratorの裏にはforeach syntax sugar):
List<int> a_list = new List<int>();
for (int i = 0; i < 100; i++)
{
a_list.Add(i);
}
int total = 0;
IEnumerator<int> a_enumerator = a_list.GetEnumerator();
while (a_enumerator.MoveNext())
{
total += a_enumerator.Current;
}
ご覧の通り、foreachで隠きます。純査します。
でも、".純方法"になることができるの作成リスト< 地>項目です。だいたいと思い制御を繰り返し処理の回収が少しカスタムしてのコレクションの実施はIEnumerable< T>および/またはICollection< T>インターフェースです。
近い直訳にc#のいかんを推定
public class Native
{
public class Local
{
public string m_str;
public int m_int;
}
private List<Local> m_Locals = new List<Local>();
public List<Local> Locals
{
get{ return m_Locals;}
}
}
その後ユーザーができる
foreach( Local item in someNative.Locals)
{
...
}
他のヒント
@フィリップ-おかげさえ思うのは正しい方向を向いている。
見た後にコードされ、もう少し読ド帳 C++/CLI行, と思いをはインデックスィスを返しまconst追跡対応、地域へのインスタンスの管理にヒープを入れるのがベストです。その結の実施もの、例えば次のようなもの:
public ref class Managed
{
public:
ref class Local
{
String^ m_Str;
int m_Int;
};
property const Local^ Locals[int]
{
const Local^ get(int Index)
{
// error checking here...
return m_Locals[Index];
}
};
private:
List<Local^> m_Locals;
};
所属していません StackOverflow