C APIを設計しています。
処理自体の記述にはC++を用いています。
ある関数の引数にenum型の変数を渡します(動作モードを指定するものだと思ってください)。
ユーザーには公開したくない動作モードを作ろうと思っています。
一つの方法としては公開用のenumと内部用のenumを定義して、呼ばれた関数内で公開用から内部用にキャストする方法が考えられます。
しかしこの場合本質的に同じものを2回定義することになり、片方だけ更新したけどもう片方は更新し忘れたなどの原因でバグが出やすくなると思います。
何とかして記述の重複を避ける方法はないでしょうか?
C
1//user.c 2#include "API.h" 3int main(){ 4 device_run(normal_mode); 5 return 0; 6}
C
1//API.h 2//公開用enum 3typedef enum{ 4 public_normal_mode, 5 public_fast_mode 6} public_device_mode_t; 7void device_run(public_device_mode_t mode);
C
1//API-impl.h 2#include "API.h" 3//実装用enum 4typedef enum{ 5 private_normal_mode, 6 private_fast_mode, 7 private_maintainance_mode // 隠したいモード 8} private_device_mode_t;
C++
1// API-impl.cpp 2#include "API-impl.h" 3void device_run(public_device_mode_t mode){ 4 switch(static_cast<private_device_mode_t>(mode)){ 5 case private_normal_mode: 6 /* run as normal mode */ 7 case private_fast_mode: 8 /* run as fast mode */ 9 case private_maintainance_mode: 10 /* run as maintainance mode */ 11 } 12}
回答4件
あなたの回答
tips
プレビュー