Приветствую
Суть задачи проста - получить параметры одного или всех сетевых интерфейсов, понятно что можно в векторе, например, вернуть, но можно как то вот хитрожопо сделать через std::function или что то иное есть??? Так чтобы снаружи вызова можно было построчно обработать.
код, в котором не догоняю как можно getIPs и getIP реализовать, чтобы потом их вызывать можно было???
std::string getSockToIP(const struct sockaddr * psa)
{
    uint8_t laddr = 0;
    char * addr = nullptr;
    std::string rt("");
    switch (psa->sa_family)
    {
        case AF_INET:
            addr = (char*)calloc(laddr = INET_ADDRSTRLEN, sizeof(char));
            break;
        case AF_INET6:
            addr = (char*)calloc(laddr = INET6_ADDRSTRLEN, sizeof(char));
            break;
    }
    if (laddr > 0)
    {
        inet_ntop(psa->sa_family, &((struct sockaddr_in*)(psa))->sin_addr, addr, laddr);
        rt.assign(addr);
        free(addr);
    }
    return rt;
}
std::string getIPAddr(const struct ifaddrs * pifa)
{
    std::string rt(pifa->ifa_name);
    if (pifa->ifa_addr)
        rt += " " + getSockToIP(pifa->ifa_addr);
    if (pifa->ifa_netmask)
        rt += " " + getSockToIP(pifa->ifa_netmask);
    return rt;
}
bool getIFAddrs(std::function<bool(struct ifaddrs * pifa)> cbFunc)
{
    struct ifaddrs * pifa = nullptr;
    if (getifaddrs(&pifa))
        return false;
    else
    {
        for (struct ifaddrs * p = pifa; !p; p = p->ifa_next)
            if (cbFunc(p))
                break;
        freeifaddrs(pifa);
        return true;
    }
}
void getIPs(std::function<std::string(void)> cbFunc)
{
    getIFAddrs([&](struct ifaddrs * pifa)
    {
//getIPAddr(pifa)
        return false;
    });
}
void getIP(const char * dev)
{
    getIFAddrs([&](struct ifaddrs * pifa)
    {
//getIPAddr(pifa)
        return !strcmp(pifa->ifa_name, dev);
    });
}







