“std::thread::thread”: 没有重载函数接受 2 个参数 TCPServer
时间: 2024-10-30 20:06:31 浏览: 8
C++ 11 std::function和std::bind使用详解
在C++标准库中的`std::thread`类,它的构造函数确实没有提供一个直接接受两个参数的重载版本,以便用于创建新的线程实例。当你看到像`std::thread TCPServer(int port)`这样的形式,实际上是创建了一个名为`TCPServer`的线程,这个线程会初始化一个TCP服务器监听指定的端口。
在这种情况下,`TCPServer`很可能是一个自定义的函数或者类,它内部通过某种方式(如成员函数或者静态成员函数)接收了`int port`作为参数,并负责启动一个TCP服务器。例如:
```cpp
class TCPServer {
public:
TCPServer(int port) : _port(port) {
// 创建并启动线程的逻辑
thread = std::thread(&TCPServer::run_server, this);
}
private:
void run_server() {
// 实现具体的TCP服务启动代码
// ...
}
int _port; // 用于存储端口号的变量
};
// 使用示例:
std::thread server(TCPServer, 8080); // 这里是间接的方式创建线程
```
这里,`&TCPServer::run_server`是`TCPServer`类的一个指向成员函数的指针,它会被传递给`std::thread`的构造函数,实际上启动的是`run_server`这个线程内的操作。如果没有明确定义,编译器会抛出错误,因为`std::thread`的默认构造函数期望一个无参的函数指针。
阅读全文