首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++-CLI中匿名复制对象?

如何在C++-CLI中匿名复制对象?
EN

Stack Overflow用户
提问于 2010-02-12 19:23:39
回答 1查看 422关注 0票数 2

我有一个包含在System::Collections::Queue中的数据流。我的数据源可以将相同的数据输出到多个流,但要这样做,需要为每个流复制数据。我目前做了以下工作:

代码语言:javascript
复制
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对象。如果能像这样做一些更通用的事情就好了:

代码语言:javascript
复制
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]);
    }
}

无法编译的...but,因为:

代码语言:javascript
复制
1>.\DataGatherer.cpp(72) : error C3673: 'System::Object' : class does not have a copy-constructor

那么,在不知道对象类型的情况下复制对象是可能的吗?..and如果是,我该怎么做?:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-13 19:43:57

MyDataMyOtherData都实现ICloneable,然后更改AddDataToQueues以接受任何实现ICloneable的对象。

代码语言:javascript
复制
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;
};

然后..。

代码语言:javascript
复制
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]);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2251393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档