こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ラムダ式を関数に渡したいのですが

Class1からClass2にある関数の引数にラムダ式で関数を渡すようなプログラムを作ろうと思い、以下のようにコードを記述しました。

#include <iostream>

class Class1 {
int i = 0;

void func() {
std::cout << "Hello world" << std::endl;
}

void init() {
Class2 *class2 = new Class2();
class2->setFunc([this] { func(); i++; }());
}
};

class Class2 {
void(*mFunc)();
void runFunc(){
mFunc();
}

public:
void setFunc(void func()) {
mFunc = func;
}
};

すると
class2->setFunc([this] { func(); i++; }());
のところで「型"void"の引数は型"void(*)()"のパラメーターと互換性がありません」というエラーが発生してしまいます。

キャプチャにthisを渡したラムダ式を他のクラスの関数ポインタのような変数に代入させるようにしたいのですがどのように記述したらできますか

投稿日時 - 2016-03-07 16:12:57

QNo.9139373

困ってます

質問者が選んだベストアンサー

やりたいことはこんなことかしら?

#include <iostream>
#include <functional>

typedef std::function<void(void)> func_type;

class Class2 {
func_type mFunc;
public:
void runFunc() {
mFunc();
}

void setFunc(func_type func) {
mFunc = func;
}
};

class Class1 {
int i = 0;
void func() {
std::cout << "Hello world #" << i << std::endl;
}
public:
func_type get() { return [this]() { func(); }; }
};

int main() {
Class2 c2;
Class1 c1;
c2.setFunc(c1.get());
c2.runFunc();
}

投稿日時 - 2016-03-21 10:12:49

お礼

その通りです。質問の仕方がわかりすらくてすみません…
functionalというライブラリを使うと実現可能なのですね。助かりましたありがとうございます。

投稿日時 - 2016-03-23 17:55:48

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問