共有/動的ライブラリ ( 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% 同じです)。それを回避するためのベスト プラクティスを知っている場合は、お知らせください。