简体   繁体   English

'operator sockaddr *()' 在这里是什么意思?

[英]What does 'operator sockaddr *()'mean here?

What does 'operator sockaddr *()'mean here? 'operator sockaddr *()' 在这里是什么意思? The class Raw is an inner class, sockaddr is a struct. class Raw 是一个内部 class,sockaddr 是一个结构。


struct sockaddr
  {
    __SOCKADDR_COMMON (sa_);    /* Common data: address family and length.  */
    char sa_data[14];       /* Address data.  */
  };

class Address {
  public:
    //! \brief Wrapper around [sockaddr_storage](@ref man7::socket).
    //! \details A `sockaddr_storage` is enough space to store any socket address (IPv4 or IPv6).
    class Raw {
      public:
        sockaddr_storage storage{};  //!< The wrapped struct itself.
        operator sockaddr *();    // here
        operator const sockaddr *() const;
    };

  private:
    socklen_t _size;  //!< Size of the wrapped address.
    Raw _address{};   //!< A wrapped [sockaddr_storage](@ref man7::socket) containing the address.
.....
.....

This is a user defined conversion function .这是用户定义的转换 function An object of type Raw can implicitly be converted to a sockaddr pointer. Raw类型的 object 可以隐式转换为sockaddr指针。 For example the following will compile:例如以下将编译:

void fun(sockaddr *p); // function that takes a sockaddr pointer

Address::Raw r;
fun(r); // implicit conversion occurs from Raw in order to use function `fun`

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM