基本的に言われている事はコードの共通化をしたいと言うだけの話に見えます。
(要は共通の処理をクラスとして纏める事で再利用したいと言う話)
各ダイアログにあるクラスが一箇所の状態遷移変数に対して更新を掛けたいとか
そういう話では内容に見えますけれど、違うのでしょうか?
ジェネリッククラスのインスタンスは各ダイアログクラスのメンバー変数として独立して
いて良いのでしょう?
ならば、色々考えるよりもそれを使う必要があるクラスのヘッダーファイルに
インクルードするのがもっとも単純でわかりやすい対応だと思います。
基本的にインクルードする必要があるかどうかはそのクラスの宣言を行う
ヘッダーファイルで行えるはずですし、そうしておく事でそのヘッダーファイルを
インクルードするだけでそのクラスが使えるようになるわけなので便利だと
思います。ただし、各ヘッダーファイルは適切に二重インクルード防止の処置を
行っている事が大前提ですけれど。
各ヘッダーファイルでのインクルードし忘れは、ビルド時に発覚するはずですから
問題ないでしょう。
各ヘッダーファイルへインクルードすると言う案の何処に問題があるのでしょう?
逆にその部分をはっきりさせないと話は堂々巡りするだけだと思います。
単にインクルードする手間が面倒と言う話なら
そういうもんだからインクルードしなさいとしか言えなくなりますけれども。
ちょっと訂正。
> 基本的にインクルードする必要があるかどうかはそのクラスの宣言を行う
> ヘッダーファイルで行えるはずですし、
これは、
基本的にインクルードする必要があるかどうかの判断はそのクラスの宣言を行う
ヘッダーファイルで行えるはずですし、
の間違いです。
読み替えておくんまし。
>各ダイアログにあるクラスが一箇所の状態遷移変数に対して更新を掛けたいとか
>そういう話では内容に見えますけれど、違うのでしょうか?
ジェネリッククラスで状態遷移をします。各ダイアログクラスの状態遷移からジェネリ
ッククラスの状態遷移関数を実行するかんじです。
>ジェネリッククラスのインスタンスは各ダイアログクラスのメンバー変数として独立し
>ていて良いのでしょう?
そのようにしています。
各ダイアログクラスで状態遷移を持っているので他のダイアログクラスとは完全に別物
です。
>基本的に言われている事はコードの共通化をしたいと言うだけの話に見えます。
>(要は共通の処理をクラスとして纏める事で再利用したいと言う話)
その通りです。説明がへたですいません。
>各ヘッダーファイルへインクルードすると言う案の何処に問題があるのでしょう?
それが一般的なのですね?
ジェネリッククラスは初めて作成したので扱いに少々疑問が生まれたのです。
アプリケーションクラス(CWinAppクラス)のヘッダファイルや
「Stdafx.h」でインクルードすることをみんな拒絶している理由が知りたいなと思いま
した。
言い忘れましたが、
DLLのヘッダファイルはどこでインクルードするのが妥当ですか?
これも使用する各クラスのヘッダが望ましいですか?
> stdafx.h に書くのは個人的には絶対却下なので、こんな感じ。
この感覚は分かる気がします。(少なくとも私もstdafx.hには書かない)
> DLLのヘッダファイルはどこでインクルードするのが妥当ですか?
> これも使用する各クラスのヘッダが望ましいですか?
使うところでのみincludeして、依存関係が局所化できるようにする。
ヘッダ内でそのincludeが必要なら仕方がないが、
内部でしか使わないならソースの方にincludeする方がよいと、私なら思います。
>この感覚は分かる気がします。(少なくとも私もstdafx.hには書かない)
みなさんそうなんですね。
ボクは特に意識しないでインクルードしていました。
>使うところでのみincludeして、依存関係が局所化できるようにする。
なるほど。たしかにそうですね。
ぼくもそのようにしてみます。
最初のほうにtetrapodさんが
>stdafx.h 中で #include するのは「まず絶対に変更の無い」ファイルのみ。
>すなわち Windows/VisualC++ 側が用意したもの、ということは簡単に言うと
>#include <....> と <> で囲むべきもののみ。
と言ってましたが、
みなさんもそうですか?
また、アプリケーションクラス(CWinAppクラス)のヘッダファイルで
インクルードするときはどのような時に行いますか?
みなさんの意見を聞きたいです。
> みなさんもそうですか?
みんなかどうかは知りませんが、私はほぼ同意見です。
> また、アプリケーションクラス(CWinAppクラス)のヘッダファイルで
> インクルードするときはどのような時に行いますか?
CWinApp のクラス定義で、インクルード先の定義が必要になるとき。
例えば、
CWinAppのメンバに実体の構造体などを持つ場合。
#include <foo.h>
CWinApp
{
Foo foo;
};
了解しました。
みなさん、色々なご意見ありがとうございました。