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编译器。
我是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编译器。