كيف يمكنني تكرار كائن مجهول في C ++ - CLI؟
-
20-09-2019 - |
سؤال
ولدي تيار من البيانات التي ترد في System::Collections::Queue
. بلدي الانتاج يمكن أن مصدر البيانات نفس البيانات إلى تيارات متعددة ولكن للقيام بذلك، تحتاج إلى تكرار البيانات لكل واحد. أفعل حاليا ما يلي:
void DataGatherer::AddMyDataToQueues(MyData^ data)
{
// Send duplicates to all queues
for( int i = 0; i < m_outputQueues->Count; i++ )
{
AddResultToQueue(gcnew MyData(data), (Queue^)m_outputQueues[i]);
}
}
والذي يعمل بشكل جيد طالما أنا أرسل الأجسام MyData
. دعونا نقول أريد أن أبعث الأجسام MyOtherData
كما لو جيدا. سيكون من الجميل أن تفعل شيئا أكثر عمومية مثل هذا:
void DataGatherer::AddDataToQueues(Object^ obj)
{
// Send duplicates to all queues
for( int i = 0; i < m_outputQueues->Count; i++ )
{
AddResultToQueue(gcnew Object(obj), (Queue^)m_outputQueues[i]);
}
}
و... ولكن هذا لن تجميع للأسباب التالية:
1>.\DataGatherer.cpp(72) : error C3673: 'System::Object' : class does not have a copy-constructor
وهكذا هل من الممكن لتكرار كائن دون معرفة نوعه؟ .. و إذا كان الأمر كذلك، كيف أفعل ذلك؟ :)
المحلول
وعلى حد سواء MyData
وMyOtherData
تنفيذ ICloneable
، ثم تغيير AddDataToQueues
لقبول أي كائن تنفيذ ICloneable.
public ref class MyOtherData : public ICloneable
{
public:
MyOtherData()
: m_dummy(-1)
{
}
virtual Object^ Clone()
{
MyOtherData ^clone = gcnew MyOtherData();
clone->m_dummy = m_dummy;
return clone;
}
private:
int m_dummy;
};
وبعد ذلك ...
void DataGatherer::AddDataToQueues(ICloneable^ data)
{
// Send duplicates to all queues
for( int i = 0; i < m_outputQueues->Count; i++ )
{
AddResultToQueue(data->Clone(), (Queue^)m_outputQueues[i]);
}
}
لا تنتمي إلى StackOverflow