0
我有一個模板類是這樣的:使用std ::函數來調用一個成員函數,而使用模板
template <typename T>
class AguiEvent {
std::vector<std::tr1::function<void(T, AguiWidget*)>> events;
public:
void call(AguiWidget* sender, T arg) const;
void addHandler(std::tr1::function<void(T, AguiWidget*)> proc);
void removeHandler(std::tr1::function<void(T, AguiWidget*)> proc);
void removeHandler();
AguiEvent();
};
template <typename T>
void AguiEvent<T>::removeHandler()
{
if(events.size() > 0)
{
events.pop_back();
}
}
template <typename T>
void AguiEvent<T>::addHandler(std::tr1::function<void(T, AguiWidget*)> proc)
{
events.push_back(proc);
}
template <typename T>
void AguiEvent<T>::removeHandler(std::tr1::function<void(T, AguiWidget*)> proc)
{
for(int i = 0; i < events.size(); ++i)
{
if(events[i] == proc)
{
events.erase(events.begin() + i);
return;
}
}
}
template <typename T>
void AguiEvent<T>::call(AguiWidget* sender, T arg) const
{
for(size_t i = 0; i < events.size(); ++i)
events[i](arg,sender);
}
template <typename T>
AguiEvent<T>::AguiEvent()
{
}
然而,使用這樣的:
testWidget[count]->eventMouseClick.addHandler(&testWidget[0]->silly);
導致此錯誤:
Error 5 error C2276: '&' : illegal operation on bound member function expression c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\main.cpp 190
我以爲std :: function允許這個。我究竟做錯了什麼?
感謝
所以我沒有辦法在內部完成這個骯髒的工作,所以用戶所要做的就是去做&testWidget [0] - >愚蠢? – jmasterx 2010-11-08 17:06:41
不,沒有語法將實例隱式地綁定到成員函數。 – 2010-11-08 17:22:38