我有包含在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

因此,它是可以复制的对象不知道它的类型? ..和如果是这样,我怎么办呢? :)

有帮助吗?

解决方案

同时拥有MyDataMyOtherData实施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]);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top