これはWin32アプリケーション自体とは何の関係もないと思います。これは、switchステートメントの使用と関係があります。
たとえば、メッセージをそのメッセージを処理する関数にマップするマップを使用することを妨げるものは何もありません。
その場合、コードに関する限り、switchステートメントはありません。マップルックアップだけです。つまり、複雑さは時間の経過とともに一定に保たれるはずです。
これが必要な理由は、マップを使用することで、「switchステートメント」をコードからC++標準ライブラリに効果的に移動しているためです。McCabeの複雑さは、コードの測定です。つまり、ロジックがより単純になり、複雑さのスコアがそれを示します。
なぜそれはあなたのコードを測定しているのですか?メトリックの理由は、コードの保守性を評価するためであり、C++標準ライブラリを保守する予定はないためです。
非常に簡単な例を次に示します。
#include <iostream>
#include <map>
#include <functional>
typedef std::map<int,std::function<void()>> ProcessMessageMap;
void print_hi() { std::cout<<"hi"<<std::endl; }
void print_bye() { std::cout<<"bye"<<std::endl; }
enum Message { SAY_HI = 0, SAY_BYE, DONT_DO_ANYTHING } messages;
void process_message( const ProcessMessageMap &m, Message msg )
{
auto i = m.find(msg);
if(i != m.end())
{
(i->second)();
}
}
void setup_map( ProcessMessageMap &m )
{
m[SAY_HI] = std::bind(print_hi);
m[SAY_BYE] = std::bind(print_bye);
}
int main()
{
ProcessMessageMap msg_map;
setup_map( msg_map );
process_message( msg_map, SAY_HI );
process_message( msg_map, SAY_BYE );
return 0;
}
ここで出力を見ることができます:http://ideone.com/bq7HgT