c++/cli 无法在 get 属性 上使用运算符

c++/cli unable to use operator on get property

我是c++/cli的新手,所以我想弄清楚一些事情。

在我的项目中,我使用了以下代码:

//fileloader class

ref class FileLoader {
public:
    property ProgressListeners^ DownloadProgressListeners {
        ProgressListeners^ get() { return progress_listeners; }
    }
    static property FileLoader^ Instance {
        FileLoader^ get() { return theSingleInstance; }
    }

 //some methods etc...
}

//progresslistener class


public interface class ProgressListener {
    void DownloadProgressCallback(Object^ sender, DownloadProgressChangedEventArgs^ e);
};

public ref class ProgressListeners {
    typedef List<ProgressListener^> ListenersList;

    ListenersList^ listeners = gcnew ListenersList;

public:
    void ProgressCallback(Object^ sender, DownloadProgressChangedEventArgs^ e) {
        for each (ProgressListener^ listener in listeners) 
            listener->DownloadProgressCallback(sender, e);      
    }

    void operator += (ProgressListener^ listener) { listeners->Add(listener);}  
};

并且必须这样做,因为据我了解,get 属性 无法用作左值

// somewhere in code

    ProgressListeners^ tmp = FileLoader::Instance->DownloadProgressListeners;

    tmp += gcnew WindowsFormProgressListener(downloading_bar, m_log);
    tmp += gcnew ConsoleProgressListener;
    tmp += gcnew GUIProgressListener;

不过我要是能这样就更好了:

FileLoader::Instance->DownloadProgressListeners += gcnew WindowsFormProgressListener(downloading_bar, m_log);
FileLoader::Instance->DownloadProgressListeners += gcnew ConsoleProgressListener;
FileLoader::Instance->DownloadProgressListeners += gcnew GUIProgressListener;

我不知道如何使这段代码正确,希望我能在这里找到建议

试试这个:

*FileLoader::Instance->DownloadProgressListeners += gcnew TestListener();

DownloadProgressListeners 是 ProgressListeners class 引用而不是左值。引用它你会得到一个左值。您找到的语法:

ProgressListeners^ tmp = FileLoader::Instance->DownloadProgressListeners;
tmp += gcnew TestListener();

我认为是一个"trick"的ms编译器。