[ Home on 246net ]

C++で開発

好むと好まざるとに関わらず、C++言語を使った開発をすることになったときに調べたことの蓄積。

言語仕様

ブートストラップ

main関数

パッケージ管理

名前空間

ヘッダファイル

文法要素

プリプロセッサ

クラス

例外

テンプレート

デバッグ

アサーション

コーディング標準

ガイドライン

参考文献

デザイン

デザインパターン

GoFのデザインパターン

クラス設計

イディオムまたはインプリメンテーションパターン

物理(バイナリ)デザイン

実装デザイン

クラス・関数などの論理エンティティに対して、ファイル・ディレクトリなどの実装エンティティに関するデザインのこと。例えば、ヘッダファイル(*.h)とインプリメンテーションファイル(*.cpp)の構成法、記述法や、ファイルのディレクトリへの配置法、ライブラリの構成法など。

開発環境

コンパイラ

GCC(g++)

Visual C++

Borland C++

eMbedded Visual C++ (Windows CE用)

Sun Studio C++ (Solaris用)

エディタ

Emacsを使用する

ビルドツール

GNU make

automake

imake

MPC

CMake

nmake

ドキュメントツール

doxygen

ソースコードのコメントから、HTMLやLaTeXなどの形式で、APIリファレンス文書(関数仕様書)を生成するツール。

統合開発環境

Eclipse CDT

NetBeans C/C++

テスト

ユニットテスト

ユニットテストフレームワーク参考文献

品質

メトリクス

デバッグ便利ツール

Windows OS系

OS依存

プロセス間通信(IPC)

共有メモリを使用する

ソケットを使用する

時刻・時間の計測

時間の計測

その他通信

シリアル通信

国際化(テキストの外部リソース化)

プログラム中にメッセージ文字列を埋め込んでしまうと、メッセージ文字列を変更するのにソースコードの変更が必要になります。そこで、メッセージ文字列を外部リソース化することで、プログラムを再コンパイルせずにメッセージ文字列だけ入れ替えることを可能にします。

gettext

GNUの国際化機能です。char*の文字列をキーにメッセージを定義したファイルを用意しておき、プログラム実行時にgettest関数でキー文字列を指定し、リソースのメッセージ文字列を取得します。なので、大抵は原文(英語)メッセージ文字列をキーに、リソースの翻訳されたメッセージ文字列を取り出すように使用することが多いです。

メッセージカタログ(catgets)

X/Openで標準化されている国際化機能です。gettextと似ていますが、キーが数値である点が違います。数値がキーなので、直感的でないのがいまいちです。

X Window Systemのリソース

Xにはリソースという仕組みがあるので、Xアプリケーションならば外部ファイルから文字列を取得することができます。ただし、Xでないと使えないので、移植性の観点からは少々制限があります。

ライブラリ

標準C++ライブラリ

STL

STLport

汎用ライブラリ

boost

準標準C++ライブラリとも言われる。様々な便利なライブラリを集めたもの。ライブラリはテンプレート中心であり、一部のパッケージを除いてヘッダーファイルだけで機能を提供する。

主な機能は、文字列処理、スマートポインタ、日付と時刻、ファイルシステムユーティリティ、マルチスレッドと排他、非同期入出力とソケット通信、シリアライズ、数学ライブラリ、データ構造と反復子、関数型プログラミング、メタプログラミング、ユーティリティ、シグナル、グラフ、Physonとの連携など。

ACE

プラットフォーム非依存なネットワーク・プログラムを開発するためのクラスライブラリ&フレームワーク。ソケット、メモリアロケート、メモリマップドファイル、メッセージキュー、スレッド、同期、といったOSのシステムコールをラッピング・ファサードで包んでいる。

ロギングライブラリ

ライブラリの選択

ロギングライブラリの選択は悩ましいものがあります。

log4cpp

Java言語用のオープンソース・ロギングライブラリ log4j のC++言語移植版。

GUIライブラリ

Xlib

X Window SystemのC言語用APIがXlibで、ウィンドウを生成することと、文字・図形・画像を描画する基本機能で構成されています。

GTK+

元はX Window System上のGUIツールキット。Linux上でQtと二分している。最近ではWindowsや他のOSへも移植されており、クロスプラットフォームなGUIツールキットとなりつつある。ただし、C言語APIなので、C++から使うとストレスが大きい(インピーダンスミスマッチ)。gtkmmやIntiといった2,3のC++ラッパーライブラリがあるにはある。

Solarisでは、バージョン9から標準でGNOMEデスクトップが搭載されるようになっている。

Qt

Linux上でGTK+と二分しているX Window System上のGUIツールキット。C++言語APIだが、シグナル・スロットの処理等に独自拡張の記法を取り入れており、mocと呼ばれるツールでC++ソースコードに変換する。

OpenGL

プラットフォーム非依存な3次元グラフィックス・ライブラリ。C言語用API。

CORBA

全般

TAO

CORBA2.6相当の実装に加えて、Realtime CORBA、QoS、マルチキャスト、フォールトトレーラントといった拡張が加えられている。適用実績も豊富。内部的にはACEを基盤にして構築されている。

MICO

フリーなCORBA実装系御三家の一つ。

並列系ライブラリ

OpenCL

GPU(Graphics Processing Unit)等の演算器を多数持つプロセッサに演算を並列実行させるためのフレームワークの共通仕様。GPU等演算用プロセッサ側で並列実行するためにC言語を拡張したOpenCL C言語と、それを制御するCPU側で使用するAPIで構成される。2010年中ごろ時点で、MacOS/Windows/Linux上で、GPUはNVIDIA製/ATI製で利用可能。

セキュリティ系ライブラリ

OpenSSL

他言語とのインタフェース

SWIG

SWIG:Simplified Wrapper and Interface Generator。C/C++言語のライブラリをスクリプト言語から簡単に呼び出すための変換を行うツール。

C++拡張

AspectC++

Tips

文字列に関するTips

整数値と文字列の相互変換

文字列で表現された整数値を、組み込み型のintなどのインスタンスに変換したり、逆にint型などのインスタンスを文字列に変換したりとした処理をC++で記述するのは意外と面倒です。使用するライブラリによって書き方がいくつかありますが、基数(16進数等)を伴う場合は制約があります。


This page is written by Toru TAKAHASHI.(torutk@02.246.ne.jp)