So-net無料ブログ作成
検索選択

CArrayで配列の配列(ネスト)を実現する方法 [ソフト開発]

CArrayで配列の配列(ネスト)を実現したいことがよくある。
シンプルにこんなことやると、ビルドエラーになる。
typedef struct {  // 構造体
	CStringArray m_ary;
}S_TEST;

CArray<S_TEST,S_TEST> ary;
S_TEST test1;
test1.m_ary.Add(_T("a"));
test1.m_ary.Add(_T("b"));
ary2.Add(test1);
S_TEST test2;
test2.m_ary.Add(_T("c"));
test2.m_ary.Add(_T("d"));
ary2.Add(test2);
一方、こんなふうにするとうまくいく。
CArray<S_TEST*,S_TEST*> ary;
S_TEST* pTest1 = new S_TEST;
pTest1->m_ary.Add(_T("a"));
pTest1->m_ary.Add(_T("b"));
ary.Add(pTest1);
S_TEST* pTest2 = new S_TEST;
pTest2->m_ary.Add(_T("c"));
pTest2->m_ary.Add(_T("d"));
ary.Add(pTest2);
構造体定義をnewにしているだけのことだ。
以下のように、値を参照しても問題なかった。
CString msg;
for( int i=0; i<ary.GetSize(); i++ )
{
	S_TEST* pTest = ary.GetAt(i);
	for( int j=0; j<pTest->m_ary.GetSize(); j++ )
		msg += pTest->m_ary.GetAt(j);
	delete pTest;
}
AfxMessageBox( msg );  // abcdと出る


nice!(1)  コメント(0)  トラックバック(0) 

nice! 1

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。