サイトマップ
お知らせ、メモ
案内板
うちのヘッドライン
 




トップ  >  プログラム豆知識  >  VC2008豆知識  >  STL/CLRを使うときの豆知識

STL/CLRを使うときの豆知識

注意!

この記事の内容は特にアヤシイです。


C++/CLIではマネージコード用のSTL/CLRがあります。 従来のSTLの代わりにこっちを使うことで、マネージコード内でもSTLのように使うことができるらしい。

ですが、いくつか注意することがあるようなので、筆者が引っかかってしまったところを記録します。 まだよくわかっていませんが。

STL/CLRコンテナを関数の引数にするとき

今までは、STLコンテナを参照型で関数の引数にしてたりしましたが、 同じことをやろうとするとリンカエラー2022が出てしまうことがあります。 (出ないこともあります。何か理由があるのでしょうが、よくわかりません。)

これを回避する方法は、VC2008のサンプルプロジェクトの、StlClr Sampleにあります。 System::Collections::Generic::IList型を引数にすればいいらしいです。 コンテナによってはSystem::Collections::Generic::ICollectionなどのほかの型でもいいようです。

これは、STL/CLRのコンテナクラスがこれらの型を継承しているからのようです。 なので、コンテナが継承している型ならいいのでしょう。

以下のようにして使うようです。

// 何か関数
System::Void CTest::GetPixels( ICollection<Point>^ icPoint )
{
  vectorコンテナに割り当て
  cliext::vector<Point> vPoint( icPoint );
}

上のコードは、ローカルのvectorコンテナにデータをコピーするそうです。 iteratorがほしいだけの場合はcollection_adapterを使う手もある様子。

当然ですが、ローカルのコンテナにコピーの作戦ではpush_back()関数で追加したりしても、 関数を抜けたら残っていません。 そんな場合はICollection::Add()関数で追加すればいいでしょう。たぶん。


クリエイティブ・コモンズ・ライセンス
This documents by Yamate,N is licensed under a Creative Commons 表示 - 継承 3.0 非移植 License.
login