C ++设置回调函数

马克·迈尔斯

我正在运行运行自定义网络服务器的程序,该服务器应输出一些活动的HTML内容:

// This is the webserver library...
class myWebServer
{
public:
    myWebServer() {}
    ~myWebServer() {}

    // ...

    void sendPageToClient()
    {
        // ... "client" is the TCP socket
        // ... "html" should contain the output of myMainProgram::ProcessASP

        client->send(html);
    }

    void runServer()
    {
        while (1)
        {
            // listens to TCP socket
            client->listen();

            // receive query from browser
            // send HTML using sendPageToClient()
            // ...
            sendPageToClient();
        }
    }
};


// This is the main program class...
class myMainProgram
{
public:
    myMainProgram() {}
    ~myMainProgram() {}

    // ...

    string ProcessASP(string query)
    {
        return
        "<html>The query string you have passed contains:<br>"
        + query +
        "</html>";
    }

    void runProgram()
    {
        // do something
    }
};


// This is a multi-threaded application
void main()
{
    myMainProgram   myProgram;
    myWebServer myServer;

    myProgram.runProgram();
    myServer.runServer();
};

我该如何设置一个回调函数,该回调函数从类中myWebServer调用myMainProgram::ProcessASP传递参数并接收其输出?

巴里

您可能要使用std::function<std::string(std::string)>

class myWebServer {
    // not really a "callback"?
    std::function<std::string(std::string)> callback;

public:
    template <typename F>
    void setCallback(F&& f) { callback = std::forward<F>(f); }

    void runServer() {
      // ...
      std::string foo = callback("hello");
      // do something with foo
    }
};

然后,您可以执行以下操作:

myServer.setCallback([&](std::string query){
    return myProgram.ProcessASP(query);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章