你写了:
static struct fuse_operations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
通常,为了在 c 中初始化一个结构,我们只能指定部分字段 [...] 但是,在 C++ 中,我们应该在不命名字段的情况下初始化结构中的变量。现在,如果我想在使用 g++ 编译器的同时使用 c 样式初始化一个结构,该怎么做呢?PS:我需要这样做的原因是 struct 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++-struct 的内存布局是否相同——不确定是否有保证)
* 更新 *
尽管这种方法在实践中运行良好,但我随后将我的代码转换为使用实用程序类,即具有单个静态“初始化”方法的类,该方法采用对 fuse_operation 结构的引用并对其进行初始化。这避免了有关内存布局的任何可能的不确定性,并且通常是我推荐的方法。