gpt4 book ai didi

c++ - 如何使用 boost::thread 调用重载函数?

转载 作者:太空狗 更新时间:2023-10-29 20:23:52 33 4
gpt4 key购买 nike

class Foo
{
public:
void method(int a,float b)
{
cout<<"This method takes float and int";
}
void method(char a,char b)
{
cout<<"This method takes two characters";
}
};

在像上面这样的具有重载函数的类中,使用 boost::thread newThread(&Foo::method,foo_obj_ptr,a,b) 创建线程会抛出错误“No overloaded function takes四个论点”。 [我已将 a 和 b 声明为仅字符。]我的假设是重载函数 boost::thread 无法正确绑定(bind)。对此有任何解决方案吗?

我在 vs2010 中使用 boost 1.54。

最佳答案

它与 boost 并没有太大关系,而是与编译器理解你在调用重载函数时(在新线程中或其他地方)指的是哪个函数有关。

这是您的代码 + 使用 std::thread 的解决方案(无重大差异):

#include <thread>
#include <iostream>

using namespace std;

class Foo
{
public:
void method(int a,float b)
{
cout<<"This method takes float and int";
}
void method(char a,char b)
{
cout<<"This method takes two characters";
}
};


int main()
{
Foo foo;
typedef void (Foo::*fn)(char, char);
thread bar((fn)(&Foo::method), &foo, 2, 3);
}

注意

typedef void (Foo::*fn)(char, char);

它允许您将第一个参数转换为 thread:

thread bar((fn)(&Foo::method), &foo, 'b', 'c');

这个转换告诉编译器你指的是哪个函数。

关于c++ - 如何使用 boost::thread 调用重载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30994889/

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