一般来说,为了初始化struct
的C,我们只能指定域的一部分。 如下图所示:
static struct fuse_operations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
然而,在C ++中,我们应初始化的变量struct
不点名的字段。 现在,如果我想初始化一个什么struct
用c ++风格,同时使用G ++编译器,如何做到这一点? PS:我需要这样做的原因是, struct fuse_operations
中有太多的领域。
不幸的是,即使是C ++标准的C ++ 11版本缺少指定的初始功能 C99的。
你写了:
static struct fuse_operations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
一般来说,为了初始化在C结构,我们只能指定域的一部分[...]然而,在C ++中,我们应初始化的结构变量不点名的字段。 现在,如果我想用c ++风格,同时使用G ++编译器来初始化一个结构是什么,如何做到这一点? PS:我需要这样做的原因是,结构fuse_operations中有太多的领域。
我的解决办法是专门用一个构造的结构:
struct hello_fuse_operations:fuse_operations
{
hello_fuse_operations ()
{
getattr = hello_getattr;
readdir = hello_readdir;
open = hello_open;
read = hello_read;
}
}
然后,声明新的结构的静态实例:
static struct hello_fuse_operations hello_oper;
测试工作确定为我(但这要看的C-struct和C ++的内存布局 - 结构是一样的 - 不知道有保证)
* UPDATE *
虽然这种方法在实践中工作得很好,我后来转换我的代码使用一个实用工具类,即,与采用对fuse_operation结构的引用,并初始化一个静态“初始化”方法的类。 这避免了关于内存布局的任何可能的不确定性,并会在一般我推荐的方法。
也许你可以写一个变量PARAM函数作为输入函数指针和分配attribs为NULL的其余部分。 既然你只有一个结构 - fuse_operations,可以实现只为一个结构的功能。 像init_struct(INT NO_OP,...),其中传递函数指针来实现。 它过于复杂和艰苦的,但我想你可以写一次,并一直使用它...