ローカルクラスの前方宣言の方法 – 固定ページ 2 – プログラミング – Home

ローカルクラスの前方宣言の方法
 
通知
すべてクリア

[解決済] ローカルクラスの前方宣言の方法

固定ページ 2 / 2

ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

ホウジョウウサギさんが求めているのは
CreateFont() に対するCreateFontIndirect()みたいなもんじゃないのかな?

CreateFont()は引数たっぷりだけど一行ですむし余計なことはしない

CreateFontIndirect()は、
LOGFONT構造体の実体をつくって設定する分が手間になるが
設定する際メンバ変数名が露出するのであとで見直し・訂正しやすい
一度つくれば、'設定情報'として使いまわせるし
その際の引数が一個ですむ

かといって、内部クラス・構造体にするとか
それを前方宣言したい理由はよくわからん。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

> めんどくさい設定情報って大抵 保存/読込 とかしたくなるので…

ファイルに保存したいという話なら、
保存用のメソッドをそのクラスに作成するか、
そのクラスを引数に渡して保存するメソッドをクラスを利用する側に
作成するかと言う話かなと思います。
そのクラス自身に保存/読込機能を付ける必要があれば前者にしますし、
なければ後者ですかねぇ。

クラス自身がデータの管理まで含めてやっているわけですから
データの受け渡しに関してもクラスで渡せば済む話です。
参照で渡せばインスタンスの複製ができてしまう事もありませんし。

ちなみにクラスの場合、コンストラクタでメンバー変数の初期化を
行なうのが筋ですから構造体の初期化の部分話もあまり説得力が有りません。
初期値のままで良いなら設定しなければ良い話ですし。
まあ、一気に設定する関数を作るというよりもアクセサを作成して
初期値から変更したい所だけアクセサで設定と言うのが一般的かなと
言う気もします。インスタンスを作成時にどうしても値を決めておかないと
まずいメンバー変数があれば、話は別ですけれども。


返信引用
ホウジョウウサギ
 ホウジョウウサギ
(@ホウジョウウサギ)
ゲスト
結合: 18年前
投稿: 73
Topic starter  

>CreateFont() に対するCreateFontIndirect()みたいなもんじゃないのかな?
はい.そのような感じですね.

多くの型が変だと感じられているのですから
自分の書いてることはかなり変なことなのでしょうね…

クラスというのは各種設定用メソッドに渡された値を全て
保持しておくのが一般的(?)なのでしょうか?
それなら
>保存用のメソッドをそのクラスに作成するか、
>そのクラスを引数に渡して保存するメソッドをクラスを利用する側に
>作成する
はその通りで,何も変なことは必要ないわけで,
>設定に使う値群→クラスの内部状態 が非可逆な場合
というのがすでにイレギュラーということなのかもしれません.
(CFontには CreateFontIndirect() と GetLogFont() があるわけですが,
 後者に相当するものが無いような状況というか設計は間違っている?)

>ちなみにクラスの場合、コンストラクタでメンバー変数の初期化を
>行なうのが筋ですから構造体の初期化の部分話もあまり説得力が有りません。
>初期値のままで良いなら設定しなければ良い話ですし。
確かに設定変更が必要なときに 既存のインスタンスを使いまわす理由がなければ
既存インスタンスを破棄してインスタンスを作り直せばいい,
というご指摘であればその通りですね.


返信引用
ホウジョウウサギ
 ホウジョウウサギ
(@ホウジョウウサギ)
ゲスト
結合: 18年前
投稿: 73
Topic starter  

×多くの型
○多くの方

です.すみません


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

一般的な話をするなら、参照のみと言うプロパティは想定できますが、
設定はできるが、参照は出来ないというプロパティは使い勝手が悪そうです。

理屈から言うと設定した側が設定した値も知っているだろうと言う話に
なりますけれど、それだと設定した値を設定する側が別に持っておく必要が
出てきます。一般的にはクラスに対して設定した値はクラスに管理させる
と思いますので、使う側からしたら使いにくいクラスになると思います。

そう考えると設定した後、設定に使った値を破棄したら
取り出す手段がないと言うのは私の感覚からするとおかしいように感じます。
値を管理しているのがクラスである以上、設定した値が取り出せる必要は
あるわけで、複数の設定値からある設定値に変換されて使用されるにしても
元の値が再現できないと不自然な気がします。

あと、どうしても使いまわしたいと言う話で中身を払う必要があるなら
初期化用のメンバー関数を用意するのが一般的ではと思います。
初期課用のメンバー変数なら引数はなくても大丈夫でしょうし。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ううっ、初期化が初期課になってる。(T_T)


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました