CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

CArrayで配列の配列(ネスト)を実現する方法

投稿日:2015年12月30日 更新日:

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と出る

-ソフト開発
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

VCランタイムがインストールされているかどうかをチェックする方法

VCランタイムとは、プログラム一覧でこんな名前のものを言う。 Microsoft Visual C++ 2015-2022 Redistributable (x64) – 14.40.33 …

最小化したウインドウの位置を保存して復元するとまずい話(C++編)

ウインドウを最小化した状態としてタスクバーから右クリックして閉じるってやると、次回ウインドウを起動したときに画面外に出てしまって、操作不能になるアプリがある。そんなときは、タスクバーの上にカーソルを置 …

コマンドラインからパラメータを指定すればテキスト抽出や画像変換ができるPDFアレコレを公開

exeがパラメータを受け取って、GUI操作でできていることをCUI操作でやってやろうじゃないかという企画。以下の記事を書いたのが1週間前。ここまで設計したなら実装しなきゃいかんということで、ヒマな週末 …

dwgからサムネイル用画像を抜き出す方法2

dwgからサムネイル用画像を抜き出す方法として理屈上の話を書いたが、これだけでは片手落ちだと考えて、プログラム実装のところまで踏み込むことにした。 まずは、dwgからサムネイル用画像を取得して、同名フ …

マルチスレッドプログラミング(C++編)

マルチスレッドプログラミング(VB.net編) マルチスレッドプログラミング(C#編) もあるので、ご覧あれ。 5秒以上の時間を要する処理をやらせていると応答なしになってかっこ悪い、なんてことをアラフ …