低レベル(つまり、フリップレジスタビットなど)のハードウェアにアクセスするコードライブラリを作成する予定です。低レベルのC/C++コードを混在させる
これまではすべてをC関数として記述し、extern "C"を使用してCとC++コードの両方でライブラリをコンパイルしました。したがって、CとC++の両方のユーザーは、単にヘッダーファイルをインクルードして、関数をそのまま呼び出すだけでした。
今、クラスとして物事を整理することを考えています。たとえば、すべての関数を組み込んで、クラス内のUARTを初期化、構成、送信、および受信することができます。これはC++でうまく動作しますが、Cについてはどうですか?私はクラス全体をextern "C"することはできません。
私が考えていたこと:extern "C"でエスケープされた標準C関数のすべてを書いてください。次に、これらの 'C'関数を呼び出す一連のインラインメソッドを持つC++のラッパークラスを提供します。
int foo_bar (int *address, int data) {...} // extern C stuff
int foo::bar (int *address, int data) { return foo_bar(address, data); } // inline method
大丈夫ですか?他のアイデア?ベストプラクティス?
何もありません。しかし、UART_send(* port、data)の代わりにUART.send(data)を行う方が簡単かもしれません。ポインタは、例えば、プライベートであってもよい。 – sybreon
Cインターフェイスは引き続き利用可能で、実際にはそのインターフェイスを使用するためには、ポートへのポインタが必要です。だからそれは本当に私的ではありません。 –