gpt4 book ai didi

c++ - 使用 boost 进行函数式编程:将 boost::bind 传递给 boost::bind

转载 作者:行者123 更新时间:2023-11-30 02:46:45 24 4
gpt4 key购买 nike

我正在尝试对我正在编写的某些代码采用函数式方法。特别是,我想将一个函数传递给另一个用它做某事的函数,然后将后一个函数安排在 boost::asio::io_service 上。 .

我尝试了以下(受 io_service.hppio_service::post 的定义的启发)作为 template <typename CompletionHandler> void post(CompletionHandler handler); ):

#include <stdio.h>

#include <boost/asio/io_service.hpp>
#include <boost/bind.hpp>

template <typename FUNC>
void foo_then_smile(FUNC handler) {
handler();
printf("Smile!\n");
}

void foo(int a, int b, int c) {
printf("The important answer is %d\n", a + b + c);
}

int main() {
boost::asio::io_service ioService;

ioService.post(boost::bind(foo_then_smile, boost::bind(foo, 1, 2, 3)));

return 0;
}

但是我得到:

no matching function for call to 'bind(<unresolved overloaded function type>, boost::_bi::bind_t<void, void (*)(int, int, int), boost::_bi::list3<boost::_bi::value<int>, boost::_bi::value<int>, boost::_bi::value<int> > >)'

后面是大量候选人。

最佳答案

问题是您试图绑定(bind)到一个不起作用的模板函数。您可以通过将 foo_then_smile 替换为仿函数来解决这个问题 here .

但不管它值多少钱;如果您使用的编译器支持 C++11,您通常可以使用 lambda 代替绑定(bind)。我发现他们的语法更清晰、更易读,而且他们会让您最终解决遇到的问题:

ioService.post([]() { foo_then_smile( []() { foo(1, 2, 3); } ); });

关于c++ - 使用 boost 进行函数式编程:将 boost::bind 传递给 boost::bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303300/

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