首页 > 解决方案 > 多个#include,不同的功能,相同的名称:如何区分它们?

问题描述

这里似乎有点问题,这可能是一个非常愚蠢的问题:

#incude <thread>

#include <winsock2.h>

两者都包含一个名为 bind() 的函数。我想调用这个 winsock2 绑定:

bind(listenerSocket._internalCustomSocket, (sockaddr*)&listenerSocket._peer, listenerSocket._peerLength)

listenerSocket 是我的自定义套接字类,如下所示:

class CustomSocket
{
public:
    CustomSocket(int port);
    ~CustomSocket();

    SOCKET OpenSocket(Listener* host);

    int _port;
    SOCKET _internalCustomSocket;
    sockaddr_in _peer;
    int _peerLength;

};

但是,它默认使用看起来像的 bind()

_NODISCARD inline _Binder<_Unforced, _Fx, _Types...> bind(_Fx&& _Func, _Types&&... _Args)

我如何指定我要调用哪一个?

到目前为止我发现的唯一解决方案是不包括包含

标签: c++winsock2

解决方案


首先,using namespace std;从您的代码中消除任何使用。那只会把事情搞砸。

然后,要访问 Winsock 的绑定,您可以编写:

::bind (...);

要访问bindSTL 中的版本,您可以编写:

std::bind (...);

现在您知道名称空间的用途了。


推荐阅读