自分のC++アプリケーションへのこだわりをMQTT-SN Gatewayを例に書いた。
#C++にmain()はいらない
オブジェクト指向言語(c++)の main()は醜悪だ。美しさを微塵も感じない。
醜い main()はアプリケーション・プログラムの奥深くに隠蔽するのがオレの流儀だ。
少なくとも、アプリケーションを作成しているのだから、アプリケーション・クラスとか、その派生クラスがなければならないと思う。 main()関数はそのアプリケーション・インスタンスを起動するための最小限のものにしたい。
これはオレのこだわり。
##最小限の main() はこれ
この様式は様々なアプリケーションに共通だ。
アプリケーションはProcessクラスとして定義される。
Process* theProcess = NULL;
int main(int argc, char** argv){
theProcess->initialize(argc, argv);
theProcess->run();
return 0;
}
後はProsessクラスの派生クラスを定義すれば、アプリケーション・プログラムが構築できる。
#アプリケーションの定義
Proessから派生したクラスのインスタンスを生成するだけ。
これをコンパイルすれば、完成。
##MQTT-SN Gateway のアプリケーションの定義はこれ
必要なクラス定義をインクルードして、メインスレッドとその他のスレッド(Task)を生成する。
#include "GatewayResourcesProvider.h"
#include "ClientRecvTask.h"
#include "ClientSendTask.h"
#include "BrokerRecvTask.h"
#include "BrokerSendTask.h"
#include "GatewayControlTask.h"
#include "lib/ProcessFramework.h"
/**************************************
* Gateway Application
**************************************/
GatewayResourcesProvider gwR = GatewayResourcesProvider();
GatewayControlTask th0 = GatewayControlTask(&gwR);
ClientRecvTask th1 = ClientRecvTask(&gwR);
ClientSendTask th2 = ClientSendTask(&gwR);
BrokerRecvTask th3 = BrokerRecvTask(&gwR);
BrokerSendTask th4 = BrokerSendTask(&gwR);
クラスのインスタンスを生成するだけで、アプリケーション・プログラムが出来上がる。 美しいではないか。
世の中、main()を隠蔽しないアプリケーション・プログラムのなんと多いことか。
興味があれば、ソースコードはここ。
https://github.com/ty4tw/MQTT-SN