ページ 11

クラスの使い方について

Posted: 2011年10月27日(木) 11:07
by dom
以下のコードのようなことをしたいのですがどうすればよいのかわかりません。
一つの方法として、もともとMyClassのコンストラクタで行っていた処理をメンバ関数に移し、オブジェクトをグローバル変数で宣言、コードの11行目ではそのメンバ関数を使用というのが思いつくのですがあまり綺麗じゃない気がします。
何か良い方法はないでしょうか?

コード:

void callback()
{
    // ここでobjを利用したい
    // 例えば
    obj.m_func();  // 
}

int main(void)
{
    Init();  // MyClassのコンストラクタ内の処理はこの後に来る必要がある。
    MyClass obj(arg1, art2, ...);  // コンストラクタは引数を取る
}
   


Re: クラスの使い方について

Posted: 2011年10月27日(木) 11:24
by バグ
こういうことでしょうか?

コード:

void callback(MyClass& obj)
{
	// ここでobjを利用したい
	// 例えば
	obj.m_func();  // 
}
 
int main(void)
{
	Init();  // MyClassのコンストラクタ内の処理はこの後に来る必要がある。
	MyClass obj(arg1, art2, ...);  // コンストラクタは引数を取る
	callback(obj);
}

Re: クラスの使い方について

Posted: 2011年10月27日(木) 13:26
by dom
関数callback()の引数は変更できないのです。
私は以下の方法しか思いつかず何かうまい方法はないかと質問させていただきました。

コード:

MyClass obj(); // ここでインスタンス化

void callback()
{
	// ここでobjを利用したい
	// 例えば
	obj.m_func();  // 
}
 
int main(void)
{
	Init(); 
	obj.process();  // 元々のコンストラクタと同等の処理

}

Re: クラスの使い方について

Posted: 2011年10月27日(木) 15:23
by バグ
そうなると・・・

1:objを素直にグローバルにする
2:MyClassをシングルトンにしてしまう
3:設計を見直す

のいずれかでしょうか?

Re: クラスの使い方について

Posted: 2011年10月27日(木) 15:57
by ISLe
callback関数の中身も変更できないのでしょうか?
あるいはヒープを使用できないとか?

コード:

MyClass *obj;
void callback()
{
    // ここでobjを利用したい
    // 例えば
    obj->m_func();  // 
}
int main(void)
{
    Init(); 
    obj = new MyClass(arg1, art2, ...);  // コンストラクタは引数を取る
    // 後略
}

Re: クラスの使い方について

Posted: 2011年10月27日(木) 17:06
by softya(ソフト屋)
コンストラクタがmainになくても良いなら次のような書き方も。

コード:

void callback()
{
	static MyClass *obj = NULL;
    // ここでobjを利用したい
    // 例えば
    if( obj==NULL ) {
	    obj = new MyClass(arg1, art2, ...);  // コンストラクタは引数を取る
	}
    obj->m_func();  // 
}
int main(void)
{
    Init(); 
    // 後略

Re: クラスの使い方について

Posted: 2011年10月27日(木) 21:56
by dom
なるほど。クラスを書き変えなくて良いのでポインタの使用がよさそうです。
この方針で行ってみます。ありがとうございました。