gpt4 book ai didi

c++ - 在 C++ 中使用 Boost 从另一个类调用函数

转载 作者:太空狗 更新时间:2023-10-29 20:46:44 24 4
gpt4 key购买 nike

我对 C++ 和 boost 库都很陌生。

我想做的是从类 Baz 中的类 Bar 调用方法 foo。这基本上是我想要实现的目标:

Baz::doSomething() {
Bar bar;

boost::thread qux(bar.foo);
}

foo 函数可能是这样的:

// bar.cpp

void foo() {
const int leet = 1337; // Very useful
}

但是,当我尝试编译时,它告诉我:

error: no matching function for call to ‘boost::thread::thread(<unresolved overloaded function type>)’
/usr/local/include/boost/thread/detail/thread.hpp:215:9: note: candidates are: boost::thread::thread(boost::detail::thread_move_t<boost::thread>)
/usr/local/include/boost/thread/detail/thread.hpp:201:18: note: boost::thread::thread(F, typename boost::disable_if<boost::is_convertible<T&, boost::detail::thread_move_t<T> >, boost::thread::dummy*>::type) [with F = void (Snake::*)(), typename boost::disable_if<boost::is_convertible<T&, boost::detail::thread_move_t<T> >, boost::thread::dummy*>::type = boost::thread::dummy*]
/usr/local/include/boost/thread/detail/thread.hpp:154:9: note: boost::thread::thread()
/usr/local/include/boost/thread/detail/thread.hpp:122:18: note: boost::thread::thread(boost::detail::thread_data_ptr)
/usr/local/include/boost/thread/detail/thread.hpp:113:9: note: boost::thread::thread(boost::thread&)

我在这里错过了什么?

最佳答案

成员函数不同于自由函数。您需要使用 std::mem_fun_ref得到一个仿函数和boost::bind (或者 std::bind 如果您的编译器支持它)绑定(bind)应该调用函数以使用它们的对象。

最终结果应该是这样的:

boost::thread qux(boost::bind(&Foo::bar, bar)); // makes a copy of bar
boost::thread qux(boost::bind(&Foo::bar, &bar)); // make no copy of bar and calls the original instance

或者不使用bind,让thread做绑定(bind):

boost::thread qux(&Foo::bar, &bar);

编辑:我记错了:你不需要 mem_funboost::bind 支持开箱即用的指向成员的指针。

感谢您针对该问题提出的意见。

关于c++ - 在 C++ 中使用 Boost 从另一个类调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448956/

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