鏑矢の憂鬱2000年3月前半
透明1ドットイメージ
 
2000/03/01 (Wed)
・今日はお休みじゃよ。いつも迷惑かけてすまんねぇ。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/02 (Thu)
・今日もあんまプログラミングしてないです。この春休みは、 Perl で CGI プログラミングと、 STL & iostream 入門用のサンプルコード作成がプログラミング関係の柱なんだけど、 Perl の方はだいたいしちゃったし、 STL & iostream 入門の方は発行前にぽかぽか書くわけにもいかんしね。
 
・とゆーわけで質問大募集! 毎日読んでる方はこの機会に送ってみましょう! そのあと日記にツッコミ送るようになっていつかそっちがメインに……げふんげふん、それはともかくとして、最近辞書に「英単語の意味」とかそーゆーのが来たりしてるんで、そーゆーのはまずこっちに先に送った方がいいかもしんないですよ。送ったその日に解答が載るんだから。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/03 (Fri)
・ STL & iostream 入門を書く上で、ある問題が発生。それは命名規則! STL や iostream は、すべて小文字。わてが使ってる我流ハンガリアンとはかなり違ってくるんですねー。で、どーするか考えた結果、我流ハンガリアンに決定(爆)。
 
・理由はもちろんある。まずひとつは、標準 C++ ライブラリの、特に iostream 系の命名規則はかなり酷いから、真似しないようにって意味で。内部で使うメンバ変数とかが悪いのは100歩下がって許すとしても、 public なメンバ関数に seekp() だの rdbuf() だの短縮した名前を付けるのはかなりあかんと思うんで。
 
・ふたつめは、 STL や iostream の関数やクラスと区別できるように。っつーても std:: は付けたままにするんでホントはあんま意味ないんだけどね(汗)。みっつめは、他の命名規則使ってもいつかぼろが出るから(爆)。こーゆー書き物系はよっぽど気を使わないとつい他の表記にしたりしちゃうんでねぇ。
 
・うむー、自分で書いてて「やっぱまずいかなぁ」とか(爆)。こーゆーのって一種の押しつけだからなー。んでもま、 STL や iostream を教えるってことは違うスタイルを押しつけるようなもんだし、いっか(爆)。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/04 (Sat)
・今日は最後の CGI 、index.html 生成 CGI を作ってました。うちのホームページは常にメニューバーが表示されるようにしてるんだけど、その関係で、たとえば「2000年3月3日のかぶゆ〜」への直リンクとかはこれまで張れなかったんですね。張るとしたら、そのたびにフレーム表示をするページを作んなきゃいけない。で、それを CGI にしてもらうようにすれば、この問題が解決すると。
 
・っつーわけで完成。http://www.kab-studio.biz/cgi-bin/cgiperl7.pl?Programing/KabuU/200003a.html__s__20000303って感じの URL で直接表示できます。 __s__ ってのは、<A NAME>タグへ移動するためには # を付けなきゃいけないんだけど、それが URL では渡されないから。こーゆー別の単語にして全部まとめて送って、 CGI の中で # に付け替えてます。
 
・今日のポカミス。ヒアドキュメント使う時、 << のあとにスペース入れちゃいかんのだね……。あと同じくヒアドキュメントの中では @ に \ 付けなきゃいけないとか。配列ってみなされるからかな? あとさっきの # 問題くらいやね。今回はただ HTML を出力するだけのものなんでかなり簡単です。
 
・さて、これで最初に作ろうと思ってた CGI はすべて完成。アクセスカウンターの表示用、同じくインクリメント用、アクセスログ、リンクログ、アクセスランキング、そしてこの index.html 生成。全部で6つ、なんか似たようなのばっかだな(汗)。でもこれでひと安心。
 
・バグ情報。アクセスログ、なぜか2度連続で書き込まれる場合があります。これはアクセスカウンターもそう。読み込む方法なんかの関係っぽくて、どうやら CGI 側では処理できそうもないです。ま、多いことはいいことだ(爆)。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/05 (Sun)
・ここ最近は STL & iostream 入門がメイン。今になって、想像以上に量があるなーと感じたり。ただ、毎日こつこつ書いてけば、3月じゅうに #15 まで、って目標はクリアできそう。……たぶん(汗)。
 
・今手元にある gcc for Win32 でもコンパイルチェックしてるんだけど、これが古いんで新しいのにしようかなと画策中。bool 型が使われてないとか一部のフラグがないとか、 VC のとの整合性が取れないんだよね。ただ、取れないことが逆にいいって気もしなくもないし、難しいところやなー。
 
・てなわけで gcc for Win32 をバージョンアップ(爆)。しかーし、標準 C++ ライブラリまわりは変わってなかったなー。実は意味なかった?(汗) ってことは、 gcc のと VC のとは基本的に別物って考えた方がいいのかも。こーゆーのって STL よりも iostream の方が多かったりするんでちょっとあうー。
 
・そいや、結構前のニュースだけど、 VC7 はかなり先になるそうっすね。これはぷらとわとかの進み方を考えるとちょっと安心(爆)。途中で「プロジェクトの設定」関係とか変わられるとかなり辛いからねー。実際の所、 VC6 は安定してるし使いやすいし、ちょっとずつサービスパックが出るくらいでちょうどいいかも。
 
・っつーわけで実は手元にある開発環境ってこのふたつなんですね(汗)。これだけじゃやっぱ心許ないなーと思うんで、 BCB5 を購入予定。アプリ用じゃない、ただのテスト用なんで一番下のでいいかな。アカデミックパックでもちょっと高いよーな気が(汗)。ってゆーか VC6 が安すぎるんやな。あ、そーいえばCマガに付いてくるのをって手も(爆)。
 
・あと Linux 系も入れた方がいいかもなー。最新の gcc はやっぱこっちが先だろうから。まーそんなわけで、こーゆーしっかりした文章書くためにはなかなか大変なのですとゆー話でした。ってゆーかもう数台用意して W2K とかも入れた方がモアベターなんやのはわかっとるんやけど……。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/06 (Mon)
・今日も今日とて STL & iostream 入門書き。「すでにできてる」 iostream を追っかける形で STL と C++ を書いてます。
 
・ STL はアルゴリズム編がなかなか大変だったんだけど、関数オブジェクト編に移ったらかなり楽に書けるようになりました。アルゴリズムはもともと膨大な数が用意されてるんでそれをまとめたりするのが大変だったんだけど、関数オブジェクトは基本的に自分で作るものだからねー。プレディケートの解説が終わって今度はバインダー関係、が #10 になります。そのあとはイテレーターやね。
 
・ C++ はなかなか難しいです。 STL と iostream の解説で出てきたものについて書いてる感じなんで、順序立てが全然できてないってゆーのがなかなか辛いです。クラスの次にいきなり演算子のオーバーロード関数とか(汗)。ただ最新の C++ のことが書けるってのは楽しいなー(爆)。
 
・久しぶりのお便りー。
 
透明1ドットイメージ
透明1ドットイメージ
 質問じゃないけど。
 
 STLのallocator について、教えてもらえませんか?
 だめ?
 
ps.
 
 KAB-Studio 、週休2日で見てます。
 やっぱり、毎日更新が楽しみです。
 でわ!がんばってください! -> 金菜さん?
透明1ドットイメージ
透明1ドットイメージ
 
・残念、私は金菜さんではないのです。わては漆黒の眠い人こと鏑矢正伝ちゃんです。さて STL のアロケーターですが、 std::vector なんかのコンテナクラスで指定する、インスタンスを作ったり削除したりするための専用のクラスです。普通はデフォルトの std::allocator (を通して new と delete )を使うんですが、たとえば「 HeapAlloc() でないとあかんよ」みたいなときには自作する必要があります。
 
・自作方法は std::allocator をコピー&ペーストして独自インプリメントする、って方法でカスタマイズしてあとはコンテナクラスの第2テンプレート引数(連想系は第3)に渡せばOK。ってゆーか他に方法ないんです(汗)。 STL のアロケーターはカスタマイズするための雛形が用意されてないんでねぇ。 std::allocator が持っている std::allocator::allocate() なんかと同名のメンバ関数が呼ばれるから、 std::allocator と同名のメンバ関数と型メンバを持たせたものなら、アロケーターとして機能します。だから、 std::allocator を真似して作るのが一番ってことなんですねー。
 
・ま、 std::allocator 自体はシンプルなクラスなんで、カスタマイズはそれほど難しくないと思うです。使うのはコンテナクラスなんだから、下手な使い方される心配はないしね。実際の、細かいインプリメント方法とか、メモリ管理の方法なんかはあんま詳しくないんでパス(汗)。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/07 (Tue)
・眠いですなー、ってこっちで言ってどーする(汗)。
 
・今日も STL & iostream 入門書き。とりあえず #10 を超えたんでひと安心。今週中に予定の #15 を超えるのは確実、春休みじゅーに全部書き終えるのも夢じゃないな。しかーし、ゼミの宿題とかもせなあかんのでそーもいかんか。来月表紙とかもそろそろラフくらい描き始めないとね。
 
・相変わらず C++ の部分を書くのが結構大変です。基本的には C++ になってからのものの紹介が中心。 typedef メンバとか enum をフラグに使うのとか。それと、 std::fstream 関係は特にライブラリ間の差が大きいんでその辺の整合性が大変です。特にフラグ関係がねー。まーこれは資料性を重視してないんで、全部フォローしなくてもいいかな。
 
・実際、入門書としては最強を目指してます。これまで STL や iostream を「難しい」「使いづらい」「役に立たない」って思ってる方に送る最強の入門書! ……たぶん(汗)。とりあえず小さなサンプルコードをかなり入れてあるし、「概念」や「仕組み」の説明にかなり割いてるからね。でもメルマガのサイズの関係上、やや説明足らずの部分もあるかもしんない……。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/08 (Wed)
・今日は STL & iostream 入門書いてないよーん。今日は辞書ちょっと書いただけ。今日はその中のネタから。
 
・今、 C++ では void な関数が注目を浴びています。普通の型が戻り値なら、 return で値を返す。 void が戻り値なら、何もしない。ってことは、戻り値によってコードを書き換えなきゃいけないってことなんですねー。それが問題になってくるのが、テンプレート。
 
・関数オブジェクトを使って処理するときに、エラー処理などで戻り値を受け取る場合があります。こーゆーとき、関数オブジェクトが戻り値を返さないタイプは使えません。 void 型は作れないからねぇ。 void 型って、思った以上に多くの部分に影響を与えるんですねー。そういう事を考えると、ダミーのクラスを作ってそれを返すのが一番かなとかとも思います。それか、特に何もなくても bool で true を返すようにするとか?
 
・ C++ には C 時代の古い形式が残っているから、そーゆーのがときどきネックになるんだよねー。 int i(); ができないとか。んでも、 C 時代のコードが通んなくなったら、そんときが C++ の最期なんじゃないかなとかとも思う。 C++ には演算子のオーバーロードとかテンプレートとか const とか、他の言語にない素晴らしい機能が揃ってるんだけど、全然使われてないっぽいし(泣)。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/09 (Thu)
・これ読んでる人はたぶん日記の方も読んでるでしょう、とは思うんだけどこっちでも紹介。今日は STL & iostream 入門壁紙を作ってました。相変わらずバカなこと考えてますねー(爆)。ちなみに 1024x768サイズもご用意いたしました。今日からこの壁紙をあなたの会社のデフォルトにしましょう(爆)。
 
・制作方法なんかは日記の方でね。 STL や iostream のことをまだよく知らないって方には結構役立つんではないかなと。あと本文の方もちゃんと書いてました。 iostream が #15 まで終了。 STL と C++ がともに #11 なんで、今週中に目標の #15 まで書き終えるのは確実。春休みはまだ3週間もあるし、ひと安心ですな。
 
・んでもなかなか障害は大きいです。やっぱ問題は cygnus gcc で起きてます。まず cygwish から入力できないことが判明。 cin とか使えないんですね。 < からファイル経由で渡すことはできるんで、標準入出力自体は生きてるっぽい。さらに、いまさらながら std::strstream がうまく動かなかったりしてちょっと困ったり。
 
・ std::strstream の指し示す配列に直接書き込んでそれを取り出す、ってのがうまくいきませんでした。まー、ちゃんと std::strstream があるんだから、そっちから渡してねってことなのかも。なかなかこーゆー細かい違いが大変だったりします。だから、標準 C++ ライブラリは「どの環境でも同じように使えますよ」ってことをウリにしない方がいいんではないかと(爆)。
 
・ちなみに iostream 関係は、まず std::strstream を、次に std::fstream を、そして std::cout と std::cin 、最後に全体の構造とカスタマイズ方法をって順番にしてます。これから書く #16 以降がカスタマイズ編で、いよいよ楽しくなるって感じ(爆)。それにしても、よく知ってる人から「 std::strstream はダメよ」とか言われそうだなぁ。でも gcc に std::stringstream 入ってないし(泣)。ま、当分なくなったりはしないでしょ。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/10 (Fri)
・今日はボリュームたっぷりっす。まずはこのサンプルコードから。
 
class CIsBig
//	: public std::binary_function< int, int, bool >
{
public:
	bool operator()( int p_Rh, int p_Lh ) const
	{
		if( p_Rh <= p_Lh )
			return true;
		return false;
	}
};

void Use_CIsBig()
{
	int iSourceAry[] = { 2, 5, 7 };
	int iAry[3];
	std::transform
		( iSourceAry
		, iSourceAry + 3
		, iAry
		, std::bind1st( CIsBig(), 1 ) );
	for( int *pi = iAry; pi != iAry + 3; ++pi )
		printf( "%d, ", *pi );
}
	
 
・これ、 VC6 でコンパイルするとコンパイラが落ちます。そしたら再起動しなきゃダメ。だから試しちゃダメよ(爆)。 std::binary_function から継承しないと std::bind1st() に使えないのよとゆーことのテストなんだが、まさか落ちるとは……。あ、だから2行目のコメントアウト取り除くとちゃんと通るんで(プログラム自体に意味はないけど)。
 
・さて今日のお便り。まず1通目。
 
透明1ドットイメージ
透明1ドットイメージ
 usoです。実は辞書の方にRefinementについての質問を送らせてもらったんですが・・・
 
 refinement of conceptsは、SGIのSTLガイドを読んでて出てきたので、一般的な用語かと思ったらそうでもなかったのかな?聞き方がまずすぎましたか・・・classのinheritanceと同じことだって書いてあるので意味は分かるんですが日本語で言うとなんなんかなぁ、って思って聞きました。あまり辞書向きのネタでもなかったですね。すみません。ということで、日本語ではなんていうんでしょう?
透明1ドットイメージ
透明1ドットイメージ
 
・どうもですー。件の STL ガイドはこちらですね。 refinement って名詞だわ……。日本語に訳すと「上質」かなぁ。「双方向イテレーターは読み取りイテレーターの上質品です」みたいな感じ? 本来なら「上質品」を「継承先クラス」と書くべきなんだが意味としてはこちら、みたいなことが書かれてますね。 public 継承は本来 is-a 関係なわけだけど、このふたつのイテレーターは大きく異なるから、継承とは違うもの、みたいな意味を込めてるんじゃないかなーと。たぶん(汗)。英語は苦手ぴょん。
 
・では次のお便り。
 
透明1ドットイメージ
透明1ドットイメージ
 はじめまして,土橋といいます
 某所で話題にあがっていて来てみました
 
 ちょっと気になったのですが、
> protected 属性は public 継承した先では public 属性
 っていうのは、単に派生側のデフォルトコンストラクタ(public)から、継承元のコンストラクタが呼び出せるだけじゃないでしょうか?
 
 過去ログいっぱいあって見きれないので、過去にあった質問ならごめんなさい。検索とかあるとさらにうれしーなー、とか言ってみたりして。検索つくるスキルなんて余裕でありそうですもんね。
 
 C++であんなにドキュメント書いてるなんて尊敬です。
 これからも頑張ってください。
透明1ドットイメージ
透明1ドットイメージ
 
・初めまして&ありがとうございますー。一応 goo とかにはロボットに来てもらうように言ってあるんで、そっちで(だいたいは)検索できるかなと。 goo ってサイト内検索できたっけかな? 検索関係は、ヘタに他の検索系の検索方法が使えないだけあって、うちで作るとなるとかなり気合い入れちゃいそうだからなー、いまはパス(爆)。
 
・件のページはコンストラクタ(中編)のことですね。うむーなんとゆーか、ここの『 protected には private と違う点がひとつあります。それは「 public 継承した先では public 属性になる」ということ』ってのが分かりにくかったですね。「継承した先」は「継承した先のメンバ関数内」っていう意味です。「 public 属性になる」っていうのは別に「 public メンバ関数になる」って意味じゃないんです。
 
・ってゆーかわてが今日読み直したら「何バカ書いたんだろわて」と自分でも間違って解釈しちゃいました(爆)。今度の月曜の更新で分かりやすく書き直すんで許してねん。ところで「某所で話題」の某所ってどこでしょー。うむーなんかそこじゃさらに色々叩かれてる気がする(爆)。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/11 (Sat)
・くそー、今日はイテレーターに手こずって全然書けなかったです。ここまで順調に来たのに、まさかイテレーターがこんな面倒だったとは。 HP と SGI で全然違うんだもんなー。
 
・まず std::iterator クラス。自分でイテレーター作るときにはこれから派生するんだけど、これが謎なマクロで囲まれてて、しかもこのマクロのフラグがどーやってもオンになんない。これがむっちゃくちゃ困ってしまいました。マクロを「取り除けば」簡単に解決するんだけど(爆)。で、最新の SGI 版 STL をダウンロードして、これはフラグがちゃんとしてたんでこれに __STL_HAS_NAMESPACES フラグを立ててやっと gcc で通りました。うむー疲れた。
 
・あと、 std::reverse_iterator のテンプレート引数が違うとか(これは前に言ったかも)、イテレータータグの仕組みが違うとことか。たとえば HP だと演算子が備わってりゃどんなクラスでも使えるんだけど、 SGI は std::iterator 派生クラスでないとアルゴリズムに噛ませられない。その代わりに、アルゴリズムのイテレータータグ版が用意されてる。やっぱ「どこでも使える」ってのは売りにならんな(爆)。
 
・別の話。とあるルートから「うにくすサーバーの引っ越し手伝って」と言われてしまうが、わてはうにくす系は全然知らないのです(泣)。Linuxでも入れときゃ少しは分かってたんだろうけど……。それにこの手伝いは春休み中なんで STL & iostream 入門が書けなくなっちゃうってことでお断りすることにしましたです。確かにスキルアップのチャンスではあるんだけどねぇ、そうそう触れられるもんでもないし。むぅ。
 
・今日のお便り。
 
透明1ドットイメージ
透明1ドットイメージ
 おこんばんは尺八郎です
 
>今日はボリュームたっぷりっす。まずはこのサンプルコードから。
http://extreme.indiana.edu/~tveldhui/papers/techniques/によりますと
Microsoft's 6.0 C++ compiler routinely crashed when asked to compile simple member-template code.
In a conversation with the Microsoft developers, they stated that their customers are not interested in standards compliance, but rather things like WFC/COM etc
だそうです。
 VCには色々変なバグがありますからね。まあ、VCもBuilderもテンプレート関係はどうも苦手のようです。ごりごりの「標準」「STL」野郎はCygnus使えってことでしょうか。このページではIntelのC++プラグインを使うのが一番楽だと言っていますがそれもそれで大変ですよね(高いし)。
 というわけで、私は今ここら辺でテンプレート勉強中です。(つーか、その前にプログラマー辞めるかも)
 
 んじゃ
透明1ドットイメージ
透明1ドットイメージ
 
・うお、電気の人になるんですか? プログラマーやめても顔出してねん。 Cygnus gcc に付いてるのも含めて SGI 版は最近嫌気がさしてきました(爆)。便利だけど標準と違う……。 VC はコンパイルエラーが分かりやすいしデバッガが便利だしエディタも VC の使うしってことでやっぱ VC かなぁ。それか「 ANSI 超準拠」をウリにする BCB5 に期待するか。
 
・VC のバグには慣れた感アリ(爆)。テンプレートと名前空間関係はホント理解できないバグが多くて。KTLの中の「謎のコンパイルエラーを避けるための関数です」ってのがそれね。なんにせよ、もうテンプレートは使わずにはいられないカラダなんでコンパイラメーカーにはがんばってもらいたいですなー。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/12 (Sun)
・今日も STL & iostream 入門書き。この紹介ページを見てもわてがどれだけ気合い入れてるか分かるでしょう(爆)。これで購読登録数低かったら泣けるな(笑)。今日の公開後にまぐまぐに登録しに行くんで購読登録開始は少しあとなんでちょっと待ってね。
 
・今日書いたのはイテレーターの部分。昨日の壁を超えたってことでまたスムーズに書けるようになりました。とりあえずひと安心。 C++ がちょっと遅れたんで全部 #15 を超えるってとこまではいかなかったけど、このペースならあと1週間で全部書き上げられそうだなー。もしできれば購読登録開始時に全部の予定書き込めるかも。
 
・んー、今日はスムーズに書けたからあんま苦労ないかな。「イテレーターに使う他の関数」、つまり「ディレクトリ内のファイルの列挙」とか「トップレベルウィンドウの列挙」とかをイテレータークラスの例にしようとしたんだけど、そーゆーのって OS やシェルによるんで使えないんですね。しゃーないんで std::istream_iterator を使いました。ま、この方があとにも継ながるからいーかな。
 
・ STL 編の残りはコンテナ。コンテナははっきし言ってあんま使ってないんでちょっと調べなあかんかな? ただインターフェイスはどれも似てるし、コンテナクラスってそんな種類ないから大丈夫でしょう。それより残ってる C++ の方が大変かも(汗)。
 
・今日のお便り。
 
透明1ドットイメージ
透明1ドットイメージ
 こんにちは、以前protetedの話をさせていただいた土橋です。
 
> うむーなんかそこじゃさらに色々叩かれてる気がする
 
 ここ(2ch)です。特に叩くとかいう風潮ではないです。
http://www.2ch.net/test/read.cgi?bbs=prog&key=952650641
 ここでちょろちょろ意見交換するよりKAB-studioに整理されて書いてある方がより多くの人に有意義だと思いますが、ネタ探し程度に覗きにくるぶんには楽しいところですよ。
 
 STL & iostream入門ってどこに書かれてるんでしょう。Codianメニューから探せない・・・
透明1ドットイメージ
透明1ドットイメージ
 
・どうもですー。「 STL & iostream 入門」はメールマガジンなので Codian では読めないのですよ。しかもまだ購読登録始まってないし。だからもちっと待ってねん。紹介されてるとこの見ると全然叩かれてないですな(汗)。はっきし言って、これ書いたのかなり前だから、わて自身ならボロクソに叩けるぞ(爆)。
 
・実際の所、 C++ については書きたいことがいっぱいあって、それを書ききれないって気付いたんで #pragma twice を始めたっていう経緯があります。だから Codian の C++ 解説はかなりテキトーなとこあります(汗)。んだからやっぱり自己責任で使ってねん。書いてることって「他で書いてないこと」多いから、それが正しいことなのか、使うべきなのか、自分で考えないとあかんかもね。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/13 (Mon)
・今日も STL & iostream 入門書き。今日はちょっとだけ。イテレーターと C++ を1ページずつ。イテレーターは「ただのポインタのラッパー」を例にしてイテレータークラスの作り方を紹介。あとはコンテナ〜。 C++ は const メンバ関数。あ、あとメンバ関数ポインタも書いたかな。
 
・メンバ関数ポインタって使い道あるのかなー。確かに関数オブジェクトに使うんなら必要なんだけど、一般的にはねぇ。たいがいポリモーフィズムやテンプレートでなんとかなるんで。それとも便利な使い道とかあるのかな?
 
・いきなりだけど、こんまえ批判されてた掲示板、ひとつ上のスレッドでお勧めされてますね(爆)。推薦してくれた方ありがとー。でも超ハイレベルなのかなぁ、わて的には全然そーゆー気なかったんだが……反省点かも。むぅ。
 
・今日のお便り。
 
透明1ドットイメージ
透明1ドットイメージ
 foolz です。
 ちょっと、失礼します。
 
void	func(int &_riX,int &_riY)
{
	_riX=iCalculatedX;
	_riY=iCalculatedY;
}
	
 
 引数としての参照の値を変更するのは「あり」でしょうか?
 プログラミングスタイルを、教えてください。
 
ps.
 
 メルマガ、バックナンバーで見てるんですが‥‥(登録してません、ごめんなさい)
 STL かぁ、どうしようかなぁ。
透明1ドットイメージ
透明1ドットイメージ
 
・どうもですー。 STL & iostream 入門のバックナンバーは最新号のみなんでやっぱ購読登録しといて損はないでしょう。ってゆーかしないとわてが損(爆)。さて質問の件ですが、「あり」です。そんためのもんってこともあるし。ただ、使う側が「知らずに書き換えられたっ!」とかがないためにいくつか注意点があります。
 
・注意点1「変更しないなら const 参照」。参照は「要らないインスタンスを作らない」ためにも使います。そーゆー時には関数の引数を「 const 参照」にして書き換えないようにしましょう。注意点2「返す値はまとめて」。上のなら _riX と _riY をひとつの構造体やクラスにまとめて渡すようにする。んでもこれやると余分な構造体とか増えちゃうんでデメリットな面も。
 
・ってゆーか、 Win32API の中には「構造体を非 const ポインタで受け取って、メンバの一部を読み取り専用、残りを値を返すために使う」とゆー非人道的(笑)な仕様をしてる関数がありますです。これだけは真似しないようにすべきなんではないかなーと。読み取り専用か、値を返すのか。それは const があるかないかで決める、それが C++ 流ってことですかね。
 
・でわまたっ!
透明1ドットイメージ
 
2000/03/14 (Tue)
STL & iostream 入門の購読登録を開始しましたッ! ってゆーか早めに購読登録したってなんもメリットないんだけど(汗)。はっ、「今購読登録していただいた方に特製壁紙プレゼント!」とかすればよかったか(爆)。
 
・今日はその STL & iostream 入門書き。今日は C++ と iostream を書き進めてました。ちょっと使ったことのある人は知ってるであろう std::endl は、こんな関数になってます。
 
std::ostream &endl( std::ostream &p_cOstream )
{
	p_cOstream << '\n';	// ホントはちょっと違う。
	return p_cOstream;	// 引数を返す。
}
	
 
・自分でマニピュレーターを作るときにはこれと同じシグネイチャーの関数を作るわけですな。で、注目点は中身。演算子のチェーンを行うために、引数を戻り値として返す必要があります。これって知らないと「引数を返す」ってこと気付かないけど、よく考えるとこれって「引数しか返せない」んだよね。
 
・マニピュレーターを作るときはこの引数と戻り値に限られる。となると戻り値は std::ostream じゃないといけない、ってことは返せるのは引数くらいなもんなんですね。これってわざとこーゆー仕組みにしたのかなぁ、だとしたらすごい(爆)。演算子のオーバーロード関数って、セオリー通りに作れる人って少ないと思うし、こーゆー仕組みにしとけば安全かもしんない。
 
・今日のお便り。
 
透明1ドットイメージ
透明1ドットイメージ
 お久しぶりです。べりあるんです。
・メンバ関数のポインタ … 私はかなりお世話になりました。今インターネットゲームを作っているんですが、参加者全体に??する、という処理が多いんです(パスワードチェック、フラグクリア、シナリオ起動、設定変更等)。そういう時に、参加者データを読み込んでメンバ関数ポインタを呼び出すループを使ったりしてます。
 でも意外と出番は無いですよね。僕の使い方も、本来ならクラスにまとめて行うべきなのかもしれません。僕的にはこういう処理はメインの流れの中にあるべき、と思ったのでメイン処理用クラスのメンバ関数に定義して、ループにメンバ関数ポインタを渡したんですけど。
 
 STL&iostream講座、楽しみにしてます。絶対購読申し込みします。頑張って下さい!
透明1ドットイメージ
透明1ドットイメージ
 
・ありがとうございますー、現在絶賛購読登録受け付け中ですー。んでもかぶヘッダーと違って楽しめはしないかも(爆)。んでも読みやすくはなってると思う……。メンバ関数ポインタってそーゆー使い方があるんですね。いろんなメンバ関数に対してブロードキャスト的な使い方をしたいときとかに、メンバ関数もクラスオブジェクトの方も自由に変えられるのは使いやすいかもしんない。
 
・昨日言った「ポリモーフィズムやテンプレート」は制限厳しいからねー。全体的な構造として下準備が必要だけど、メンバ関数ポインタならそーゆーのあんま必要ないし。それにメンバ関数ポインタってかなり安全だし、結構積極的に使っていくべきなのかも。問題は、構文が難しいとこだな(汗)。
 
・でわまたっ。
透明1ドットイメージ
 
2000/03/15 (Wed)
・今日も STL & iostream 入門書き。とーとー iostream が書き終わりました! いやー疲れた(爆)。 iostream ははっきし言ってギリギリです(汗)。ボリュームが多すぎて……最後はちょっと書き足りなかった感もあるかな。ただ、入門書で継承してオーバーライドしてってのもやりすぎかもしんない(爆)。だからこの辺でいいかな?
 
・ STL も #17 まで書いてあとはコンテナ。ってゆーかコンテナだけで残り埋められるかどうか心配(爆)。 STL の方がシンプルな分コードが簡潔で済むんで、全体のボリュームがどうしても少なくなっちゃうなー。ただ、コンテナが最後ってことで、インサートイテレーターなんかとの連携も絡めればそれなりに稼げるかも。
 
・ C++ が遅れまくってるけど、 STL と iostream が出そろってからの方がスケジュール立てやすいかも。そいや「お勧め書籍」として C++ は Effective C++ を勧めることにしました。ちょうど、 STL や iostream に必要な知識が全部揃ってるんだよね。文法的なことが書かれてる本は多いけど、「 = 演算子を作るときは *this で参照を返すんだよ」みたいなこと書いてあるのは少ないと思うんで。
 
・ちなみに現在の購読登録数30ちょい。ありがとねー。うむ、こんくらいの数の方がなんか暖かい(爆)。メルマガは数字のオーダーが大きすぎて、なんか感じ沸かないです。ちょっとわがままかな?
 
・でわまたっ!
 
 
(C)KAB-studio 2000 ALL RIGHTS RESERVED.