我目前正在编写一些代码,需要制作类似事件处理程序的东西,我可以注册显式事件并将它们存储到一个 vector 中,我可以在我的主 listen() 函数中循环。我遗漏了一些我无法通过文档和谷歌搜索查明的关于指针的信息,需要帮助来弄清楚为什么我的编译器要求一个指向成员的指针。
我已经尝试创建一个带有成员函数定义的 typedef,但我遇到的问题是它目前没有使用“非标准语法,放置一个 & 来创建一个指向成员的指针”进行编译。错误。
class Obj {
private:
typedef int (Obj::*Event) (std::vector<std::string> in);
std::vector<Event> events;
int exampleEvent(std::vector<std::string> input);
public:
Obj();
int regEvent(Event ev);
int listen();
}
示例事件代码
int Obj::exampleEvent(std::vector<std::string> input)
{
// heres my app logic
return 0;
}
在构造函数中注册事件
Obj::Obj()
{
regEvent(exampleEvent); // exampleEvent: non-standard syntax; use
//'&' to create a pointer to member
}
监听,并将事件添加到 vector 。
int Obj::regEvent(Event ev)
{
events.push_back(ev);
return 0;
}
// listen for command input
int Obj::listen()
{
// get input
string str;
getline(cin, str);
vector<string> input = split(str, " ");
// loop through events
for (auto ev : events)
{
ev(input); // <-- Term does not evaluate to function taking 1 arg.
}
return 0;
}
最佳答案
Obj::Obj()
{
regEvent(exampleEvent); // exampleEvent: non-standard syntax; use
//'&' to create a pointer to member
}
必须是
Obj::Obj()
{
regEvent(&Obj::exampleEvent);
}
和
for (auto ev : events)
{
ev(input); // <-- Term does not evaluate to function taking 1 arg.
}
必须是
for (auto ev : events)
{
(this->*ev)(input);
}
关于c++ - 存储、解析和执行存储的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56296858/