備忘録を兼ねて、こんな風に使うんだよというサンプルなど。
クラスのメンバ関数の場合(func1,func2)、
素の関数の場合(func3,func4)、
ラムダ関数を使う場合(func5,func6)。
それぞれ引数なし、ありの時の書き方。
#include <functional>
#include <iostream>
class class1 {
public:
void func1() { std::cout << "class1::func1()" << std::endl; }
void func2(int i1, int i2) { std::cout << "class1::func2(" << i1 << "," << i2 << ")" << std::endl; }
};
class class2 {
public:
std::function<void()> function1;
std::function<void(int,int)> function2;
std::function<void()> function3;
std::function<void(int,int)> function4;
std::function<void()> function5;
std::function<void(int,int)> function6;
};
void func3() {
std::cout << "func3()" << std::endl;
}
void func4(int i1, int i2) { std::cout << "func4(" << i1 << "," << i2 << ")" << std::endl; }
int main() {
class1 c1;
class2 c2;
c2.function1 = std::bind(&class1::func1, &c1);
c2.function2 = std::bind(&class1::func2, &c1, std::placeholders::_1, std::placeholders::_2);
c2.function3 = std::function<void()>(func3);
c2.function4 = std::bind(func4,std::placeholders::_1, std::placeholders::_2);
c2.function5 = [&]() { std::cout << "lambda func5()" << std::endl; };
c2.function6 = [&](int i1, int i2) { std::cout << "lambda func6(" << i1 << "," << i2 << ")" << std::endl; };
c2.function1();
c2.function2(3, 4);
c2.function3();
c2.function4(5, 6);
c2.function5();
c2.function6(7, 8);
return 0;
}
実行結果。
class1::func1()
class1::func2(3,4)
func3()
func4(5,6)
lambda func5()
lambda func6(7,8)