元组tuple存储标准库function实例对象( 包装各种类对象及其成员函数 )、解包元组对象

先把各种类对象及其成员函数包装成标准库function实例对象,并存储到元组tuple对象,创建用来解包的模板函数,解包元组,并使用function函数对象

#include <iostream>
#include <functional>  	

 //A类
struct A{
	void f1(int a, int b, double c) { std:: cout <<"A: a + b + c = " << a + b + c << "\n"; } 
	void f2() { std:: cout <<"A: Hello world \n"; } 
};

//B类
struct B{
	void f(int a, int b) { std:: cout <<"B: a + b = " <<  a + b << "\n"; } 
};

//解包元组 //使用function函数对象
template<typename T, size_t...index>
void call_function_obj(T&& t, std::index_sequence<index... > ){	
	(std::get<index>(t)( ),... ) ;
}

int main(int, char *[] )
{	//元组tuple//存储function实例对象//
	auto t = std::make_tuple(std::bind(&A::f1,A(),1,2,3.45 ),
							 std::bind(&A::f2,A() ),
							 std::bind(&B::f,B(),5,6)  );	
	call_function_obj( t, std::make_index_sequence< std::tuple_size<decltype(t)>::value >{ } );		

	return 0;
}

你可能感兴趣的:(C++,c++)