std::make_shared<std::thread>(&HTTPClient::get_list(value), this);
时间: 2024-01-19 07:04:09 浏览: 70
http_pro.rar_c#http协议_c++ http_http:liulu.pro_http协议 c++
`std::make_shared<std::thread>(&HTTPClient::get_list(value), this)` 这句代码不符合预期,因为 `std::make_shared` 的第一个参数是要构造的对象类型,第二个参数是构造函数的参数列表。而 `&HTTPClient::get_list(value)` 并不是构造函数。
如果你想创建一个带有参数的成员函数指针并将其传递给 `std::thread` 构造函数,你可以使用 `std::bind` 或者 lambda 表达式来实现。下面是一个使用 `std::bind` 的例子:
```c++
#include <memory>
#include <thread>
#include <functional>
class HTTPClient {
public:
void get_list(int value) {
// do something
}
};
int main() {
HTTPClient client;
auto t = std::make_shared<std::thread>(std::bind(&HTTPClient::get_list, &client, 42));
t->join();
return 0;
}
```
在这个例子中,我们使用 `std::bind` 来创建一个带有参数的成员函数指针,并将 `client` 的地址作为第一个参数传递给 `std::bind`。然后,我们将返回的函数对象传递给 `std::make_shared`,并将返回的智能指针存储在 `t` 中。
你也可以使用 lambda 表达式来实现:
```c++
#include <memory>
#include <thread>
class HTTPClient {
public:
void get_list(int value) {
// do something
}
};
int main() {
HTTPClient client;
auto t = std::make_shared<std::thread>([&]() { client.get_list(42); });
t->join();
return 0;
}
```
在这个例子中,我们使用一个捕获了 `client` 的引用的 lambda 表达式来调用成员函数,并将 lambda 表达式传递给 `std::make_shared`。这种方法更加简洁,但是可能会使代码更加难以阅读。
阅读全文