先把各种类对象及其成员函数包装成标准库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;
}