継承したいくつかのマネージ C++ コードを更新しようとしています。私は c++ をまったく知りませんが、1.1 の時代に ac# クラスを取り込んだので、.Net の使い方を見つけることができます。これまでのところ、ConcurrentQueue を使用してメイン スレッドからワーカー スレッドに作業を送信すると、良い結果が得られました。
fullQueue = gcnew ConcurrentQueue<int>();
..
fullQueue->Enqueue(someNumber);
次に、実際のオブジェクトを挿入して、ワーカーにより複雑な指示を送信できるようにしたいと思います。ただし、これは機能しません。
public ref class workUnit
{
int ptrOffset;
System::String^ outputPath;
public:
workUnit(int offset, System::String^ path)
{
ptrOffset=offset;
outputPath=path;
}
};
..
ConcurrentQueue test = gcnew ConcurrentQueue<workUnit ^>();
私は得る:
'System::Collections::Concurrent::ConcurrentQueue' : use of class generic requires generic argument list
'System::Collections::Concurrent::ConcurrentQueue::ConcurrentQueue' : the function template cannot convert parameter 1 from type 'System::Collections::Concurrent::ConcurrentQueue<T> ^'
明らかに、オブジェクトがキューに挿入される方法について基本的なことが抜けています。私の頭の中では、後でインスタンス化できるクラス オブジェクトへの参照を保持するキューを作成していると思うので、CLR はどの参照型が入るかを知る必要があるだけですが、明らかにこれは正しくありません。私は何が欠けていますか?