ページ 11

{}を使った関数の作り方?

Posted: 2014年9月22日(月) 08:29
by manntera
おはようございます。
今回質問したい内容は、
if(うんぬん)
{
 かんぬん
}

等の関数に{}を付けれる様な関数をC++で自作するにはどうすれば良いのでしょうか?

今やりたいのが、

void hoge(void)
{
初期化処理内容

メイン処理内容
  ↓
   終了処理処理
}

という関数があったとして、

void main(void)
{
hoge()
{
メイン処理内容を記述
}


メインでこんな感じに活用できる関数を作りたいと思っております。

初期化と終了処理を色々な場所で使い回し、メイン処理を{}の中に記述出来るみたいな感じですかね…?

回答お願いします!!

Re: {}を使った関数の作り方?

Posted: 2014年9月22日(月) 08:59
by みけCAT
C++のifは関数ではありません。
完全に提示された仕様通りにできるかはわかりませんが、ラムダ式を使うと似たことができると思います。

コード:

#include <cstdio>

template<typename Func>
void hoge(Func f) {
	puts("初期化処理内容");
	f(); // メイン処理内容
	puts("終了処理処理");
}

int main(void) {
	hoge([]{
		puts("メイン処理内容");
	});
	return 0;
}
https://ideone.com/qjyIIe

参考:ラムダ式 - C++入門

Re: {}を使った関数の作り方?

Posted: 2014年9月22日(月) 10:17
by softya(ソフト屋)
> 初期化と終了処理を色々な場所で使い回し、メイン処理を{}の中に記述出来るみたいな感じですかね…?

使い回しと言うのが気になりますね。どういうのを意図されてますか?
C++なら継承とか、委譲あたりをまず検討されるべきかと思います。

Re: {}を使った関数の作り方?

Posted: 2014年9月22日(月) 17:10
by manntera
すみません><
C++の継承は今勉強してる途中なのです・・・

継承を勉強すれば似たような感じの事が出来るんですかね?
そこらへんを勉強してもなお出来ないならまた質問させて頂きます!

Re: {}を使った関数の作り方?

Posted: 2014年9月22日(月) 18:27
by usao
まず やりたいことの意味が伝わってないような気がしますが,どうなのでしょう.
オフトピック
全く同じ初期化と終了処理を行うということは,

初期化
処理A
終了処理

初期化
処理B
終了処理



で,処理Aと処理Bは同じ変数か何か(初期化と終了処理が必要な何か)を使いまわす,ということ?

Re: {}を使った関数の作り方?

Posted: 2014年9月22日(月) 19:44
by softya(ソフト屋)
私も意図を説明して欲しかったです。
場合によっては、一般的な関数で片付く問題かも知れません。