はじめまして。
>こちらにStringTokenizerの例を出しましたが、これはどうでしょうか?
>
http://kmaebashi.com/programmer/object/shigoto.html
>
>StringTokenizerはCのstrtok()と違って、プログラムの複数の箇所から同時アクセス
>できる(というよりは、よそで使われているかどうかを意識せずに使うことができる)
>わけです。
それって、strtok()がそういう使い方に配慮されてないだけに思えます。
※C言語(非インスタンス化言語)だからできないという話とすり替えられているように感じました。
※strtok()はそんな実装なので、それが保証できない時には別途用意したこっちの関数使おうねで良さそうに感じました。
オブジェクト指向が必要ないといいたい訳ではなく、旧来のC言語でも問題なく処理できる(ライブラリ化可能)と思います。
※C言語では問題という説明でしたよね。strtok()関数の実装[関数仕様]の問題でC言語で不可能という話ではないと思います。
strtok2( STR, getid, delimiter );
strtok2( NULL, id, delimiter );
と呼び出し手順(IF)を変えてstrtok2内部でSTRを複数保持するようにする事で可能となりますよね。
StringTokenizerのインスタンスとして保持している情報をstrtok2()内部で保持してやる。
char coloncol[]="abc:cde:efg:ghij";
char commacol[]="abc,cde,efg,ghij";
char *result;
int idcol, idcom;
result = strtok2( coloncol, &idcol, ':' );
result = strtok2( NULL, idcol, ':' );
result = strtok2( commacol, &idcom, ',' );
result = strtok2( NULL, idcol, ':' );
result = strtok2( commacol, idcom, ',' );
result = strtok2( commacol, idcom, ',' );
※実際使うにはインスタンスの開放的なIFも追加する事になるかと
>また、たとえば大昔のBASICやHSPとかでは、画面に線を引く命令が、ウインドウを
>引数に取りません。まあ、大昔のBASICにはマルチウインドウがなかったから
>当然かもしれませんが、オブジェクト指向的に考えれば、最初から「ウインドウ」という
>クラスを作り、複数のウインドウを開けるようにするのではないでしょうか。
実例としては昔のSunOSに付属していたSunViewというウィンドウ環境がありました。
C++が作られるより古い時代ですが、例えばPanelCreate()関数でPanelObjectを作る(もちろん複数可)感じでC言語のライブラリ使い実現されてましたよ。
※WindowやPanelやItemやCanvasやと色々な部品がありました。同じ種類を複数生成する事もできましたよ。
※SunOS3.x, SunOS4.xで使えた記憶が。4ではX11ベースのOpenWindowへの移行が推奨されてましたが。