あなたが書いた:
static struct fuse_operations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
通常、C で構造体を初期化するには、フィールドの一部しか指定できませんでした [...] しかし、C++ では、フィールドに名前を付けずに構造体の変数を初期化する必要があります。さて、g++ コンパイラを使用しながら、c スタイルを使用して構造体を初期化したい場合はどうすればよいでしょうか? 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 構造体と C++ 構造体のメモリ レイアウトが同じであるかどうかに依存します。保証されているかどうかはわかりません)。
* アップデート *
このアプローチは実際には問題なく機能しましたが、その後、ユーティリティ クラスを使用するようにコードを変換しました。つまり、fuse_operation 構造体への参照を取得して初期化する単一の静的「initialize」メソッドを持つクラスです。これにより、メモリレイアウトに関する不確実性が回避され、一般的に推奨されるアプローチになります。