Kuroda Software Service
STLの捉え方
  [サイトマップ]

コンテンツ内メニュー

表示モード 全項表示  部分表示



マークの色と認証の関係

一般公開

無料認証

購入認証


認証についての説明

無料アカウント作成フォーム

有料ページ購入フォーム


ほかのコンテンツトップページ

STLの捉え方

● 標準テンプレートライブラリは単なるサンプルと捉える。

 iostreamに代表される標準テンプレートライブラリは、C++を学習しようとするものを惑わす悪しき存在にも思えます。C++の言語仕様が確定し、その柔軟性から従来の低水準関数より高度なクラスをライブラリとして提供しようという意図は理解できますが「これを使わないとC++ではない」という誤解を生んでいるように思えます。

 正直言ってス、トリームで文字列を扱いたいのなら開発環境をJavaにしてしまった方が良いのではないかと感じるのですが、観点を変えると標準テンプレートライブラリは 、十分に学習の対象として価値のあるものになります。このライブラリは、C++の柔軟性を提示してくれるサンプルなのです。

 提供されているライブラリに、必要な機能だけを抽出するかたちでオリジナルクラスを設計するのもいいでしょうし、ラップして多機能なクラスを設計するのもいいでしょう。

● 文字列クラスの拡張例

 標準テンプレートライブラリには、stringという文字列クラスが存在します。これらは関数スコープを超えて、バイト型のバッファを搬送する手段に使えますのでおなじみの方も多いと思います。

 例えばstring型 str変数に文字列データが格納してあり、const char*として参照する場合は、以下のような記述が必要です。

 const char *s = str.c_str();

 c_str()メソッドは内部バッファのconst char*を返しますが、頻繁にこの参照が必要な場合いちいちc_str()と書くのが面倒になります。初心者はここでこうつぶやきます。

「stringは毎回 c_str() って書くのが面倒だし....」

 残念ながら、彼か彼女は自分がC++を使ってソースを書いていることを忘れていることになります。stringはbasic_stringテンプレートをcharに適用した形態ですので、気に入らなければより高機能なクラスを 設計することができるからです。const char*で評価された場合の機能を付加すれば const char *s = str; と書けるのがC++の柔軟さです。そのことに気づけば、標準テンプレートライブラリは宝の山に見えるはずです。下記は、最低限のコードでc_str()を内部実装する例です。

#include <string>
class stringEx :public std::basic_string<char>
{
    public:
    stringEx(const char *s) :std::basic_string<char>(s){}
    operator const char*(){return(this->c_str());}
    ~stringEx(){}
};
 

お問い合わせ
©クロダ ソフトウェア サービス programmed by hidebou