我一直在尝试更新我继承的一些托管 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 应该只需要知道将进入什么引用类型,但显然这是不正确的。我错过了什么?