0

共有/動的ライブラリ ( https://github.com/zsawyer/mumble-LinkAPI ) を作成しています。

このために、共有メモリ構造体 (外部で定義されているため変更できません) 内のデータに対して、いくつかの基本的なアクセサー (get、set、および update) を提供します。私のライブラリが提供するかなりの数のアクセサがあります。Getter メソッドと Setter メソッドは問題ありませんが、更新関数が問題を引き起こします。それらはすべてほとんど同じように見えます-コードの冗長性がたくさんあります。

注: C89 にこだわりたい! つまり、C++ も C99、C11 も使いたくありません。

更新nameは、他のほとんどすべての更新関数の例です (引数は異なります)。

ErrorCode updateName(wchar_t name[MAX_NAME_LENGTH]) {
    ErrorCode err = setName(name);
    if (err != ERROR_CODE_NO_ERROR) {
        return err;
    }
    return commit();
}

エラー コードは列挙型で定義されます。

/**
 * error codes hinting at the root cause of a failure
 */
typedef enum {
    /** no error */
    ERROR_CODE_NO_ERROR = 0,
    /** win32 specific: OpenFileMappingW failed to return a handle */
    ERROR_CODE_WIN32_NO_HANDLE = 1,
    /** win32 specific: MapViewOfFile failed to return a structure */
    ERROR_CODE_WIN32_NO_STRUCTURE = 2,
    /** unix specific: shm_open returned a negative integer */
    ERROR_CODE_UNIX_NO_HANDLE = 3,
    /** unix specific: mmap failed to return a structure */
    ERROR_CODE_UNIX_NO_STRUCTURE = 4,
    /** shared memory was not initialized */
    ERROR_CODE_NO_MEMORY_WAS_INITIALIZED = 5
} ErrorCode;

元のエラーコードをライブラリ関数の呼び出し元までずっと渡したいのですが、同じ関数を別の setXxx 関数とパラメーターだけで何度も書くことは避けたいと思います。もっと簡単な方法があるべきだと思います。

質問:更新関数を書き直してErrorCode、コードの冗長性を減らし、関数をより読みやすく/短くするにはどうすればよいですか?


それとは別に、関数ドキュメントのコメントの大部分をコピーし始めたことに気付きました (つまり、set のコメントは update メソッドのコメントと 95% 同じです)。それを回避するためのベスト プラクティスを知っている場合は、お知らせください。

4

1 に答える 1