私の目標
errorcodesの大きな List を返す関数が複数あります。一部の機能は、「エラーコードのリスト」の同じおよび異なるエラーコードを使用します
- 例えば:
fun1()
errorcode1
ORのみを返しますerrorcode2
(errorcode2 はこの関数でのみ使用されます)fun2()
errorcode1
ORのみを返しますerrorcode3
(ただし、errorcode1 は両方の関数で使用されます)。
望ましいソリューションでは、次の点を考慮する必要があります。
どの関数がどのエラーコードを返すことができるかを定義する
関数がこの関数に対して意図されていないエラーコードを返そうとした場合、コンパイルエラーを取得します
- 関数の return または throw はすべて int に変換可能でなければなりません (これらの関数は C API の一部になるため)
私のアプローチ
これまでのところ、列挙型を使用するオプションを検討しましたが、解決策は私には魅力的ではありません
- 関数ごとに個別の列挙型を定義する
- すべての関数に対して 1 つのグローバル列挙型を定義する
関数ごとに個別の列挙型を定義する
enum errorcodefun1 {errorcode1=1, errorcode2=2}; // OK at least it is expressed what is expected for fun1
errorcodefun1 fun1() { };
enum errorcodefun2 {errorcode1_fun2=1, errorcode3_fun2=3 }; // minor problem: not expressing that errorcode1_fun2 is logical same as errorcode1
関数 (部分的に同じエラーコードを使用する) が多いほど、コードの重複が多くなります。
すべての関数に対して 1 つの列挙型を定義する
enum errorcodes {errorcode1=1, errorcode2=2, errorcode3=3};
errorcode fun1() {... } //do not like because I will get no compilation error if it returns errorcode3. Only errorcode1 and errocode2 is intended
errorcode fun2() {... }
私の質問
列挙型をエミュレートするクラスを作成することを考えていましたが、これまでのところ、すべてのニーズを満たすソリューションが見つかりました。
私の目標を達成するための提案やアイデアはありますか?