gpt4 book ai didi

c++ - 使用 std::function 在使用模板时调用成员函数

转载 作者:行者123 更新时间:2023-11-28 01:09:34 25 4
gpt4 key购买 nike

我有一个这样的模板类:

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]->silly 是一个具有适当签名的成员函数,看起来您应该使用 TR1 的 bind 来指定对象成员函数将被调用:

function<void(T,AguiWidget*)> handler = bind(&TestWidget::silly, testWidget[0], _1, _2);
testWidget[count]->eventMouseClick.addHandler(handler);

关于c++ - 使用 std::function 在使用模板时调用成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com