c++ - 存储、解析和执行存储的成员函数

标签 c++

我目前正在编写一些代码,需要制作类似事件处理程序的东西,我可以注册显式事件并将它们存储到一个 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/

相关文章:

c++ - 预先为 C++ 应用程序分配内存

android - Android 和 IOS 上的 Qt session 管理

c++ - 检查socket是否连接

c++ - 在哪里可以找到 MS Office 界面以在 C++ 和 COM 中进行一些自动化

c++ - C++ 中的对象声明

c++ - add_lvalue_reference_t<T> 和 T& 之间的区别

c++ - rand() 生成相同的数字

c++ - 这里发生了什么?

c++ - OpenGL/glut/stdc++ 构建错误

c++ - 释放内存二叉树