小编Dol*_*nor的帖子

variadic模板参数包扩展函数调用

我正在寻找类似的东西:

template< typename T>  
void func(T t)
{
}

template< typename... Parms> 
void anyFunc( Parms... p)
{
    func<Parms>(p)... ;  //error 
    func(p)... ;         //error 
}
Run Code Online (Sandbox Code Playgroud)

如果参数包扩展在另一个函数调用内完成,它可以工作:

template< typename T>
int some(T t)
{}

template< typename... Parms>
void func(Parms ...p)
{}

template< typename... Parms>
void somemore(Parms... p)
{
   func( some(p)...);
}

int main() 
{
 somemore(1,2,3,4,10,8,7, "Hallo");
}
Run Code Online (Sandbox Code Playgroud)

参数包扩展也适用于基类初始值设定项列表.

是否有任何解决方案也适用于将返回'void'的函数.上面的解决方法不会,虽然使用函数调用返回参数列表中的void可能永远不会工作.

有任何想法吗?

variadic-templates c++11

17
推荐指数
2
解决办法
5641
查看次数

Ubuntu上的套接字(不允许操作)

我是新手,只是在Linux下使用C ++迈出了第一步。所以我有一些关于套接字的任务。我正在遵循指南,尤其是这份指南。和代码示例不起作用。我从这个开始:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCK_PATH "echo_socket"

int main(void)
{
    int s, s2, t, len;
    struct sockaddr_un local, remote;
    char str[100];

    if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        exit(1);
    }

    local.sun_family = AF_UNIX;
    strcpy(local.sun_path, SOCK_PATH);
    unlink(local.sun_path);
    len = strlen(local.sun_path) + sizeof(local.sun_family);
    if (bind(s, (struct sockaddr *)&local, len) == -1) {
        perror("bind");
        exit(1);
    }
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我发现要编译它(代码:: Blocks),必须再包含一个:

#include <unistd.h>
Run Code Online (Sandbox Code Playgroud)

但是成功运行后,我会收到消息“绑定:不允许操作”。怎么了?我试图在根目录下运行它,但仍然无法正常工作。

c sockets linux ubuntu

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×1

c++11 ×1

linux ×1

sockets ×1

ubuntu ×1

variadic-templates ×1