C++基础3(八)
| destructor |
析构函数: destroys a std::function instance |
operator= |
给定义的function对象赋值 |
operator bool |
检查定义的function对象是否包含一个有效的对象 |
operator() |
调用一个对象 |
含模板
template <typename T>
int a(T t) {
return 1;
}
int main()
{
function<int(int)> f = a<int>;
f(1);
}
调用类成员函数
无模板
传入参数时使用User和User&都可以,这里不理解,如果您知道原因还请不吝赐教
class User {
public:
double a(int a) {
return 1;
}
};
int main()
{
function<double(User&,int)> f=&User::a;
function<double(User,int)> f2=&User::a;
User u1;
cout<<f(u1,10)<<endl;
cout<<f2(u1,10) << endl;
}
含类模板
template <typename T>
class User {
public:
int num;
void add(T t) {
}
};
int main()
{
function<void(User<int>, int)> f = &User<int>::add;
User<int>* u = new User<int>();
f(*u,10);
}
含函数模板
class User {
public:
int num;
template <typename T>
void add(T t) {
cout << "芜湖";
}
};
int main()
{
function<void(User, int)> f = &User::add<int>;
User* u=new User();
f(*u,10);
}
调用类成员静态函数
无模板
和调用普通函数差不多
class User {
public:
static double a(int a) {
return 1;
}
};
int main()
{
function<double(int)> f=&User::a;
function<double(int)> f2=User::a;
cout<<f(10)<<endl;
cout<<f2(10) << endl;
}
含类模板
template <typename T>
class User {
public:
int num;
static char* add(T t) {
cout << "芜湖";
return NULL;
}
};
int main()
{
function<char*(int)> f = &User<int>::add;
f(100);
}
含函数模板
class User {
public:
int num;
template <typename T>
static char* add(T t) {
cout << "芜湖";
return NULL;
}
};
int main()
{
function<char*(int)> f = &User::add<int>;
f(100);
}
调用类公共成员变量
无模板
class User {
public:
int num;
};
int main()
{
function<int(User)> f = &User::num;
function<int(User&)> f2=&User::num;
User u;
u.num = 100;
cout<<f(u)<<endl;
cout<<f2(u) << endl;
}
含成员变量模板
template <typename T>
class User {
public:
T num;
};
int main()
{
function<int(User<int>)> f = &User<int>::num;
User<int> u{100};
int a=f(u);
cout << a << endl;
}
调用lambda
int main() {
auto f = [](int a, int b) {
return a + b;
};
std::function<int(int, int)>func = f;
cout << func(1, 2) << endl;
}
通过bind函数调用类成员函数
无模板
class User {
public:
int a(int b) {
cout << "芜湖";
return b;
}
};
int main()
{
User u;
//通过指针调用
function<int(int)> f = bind(&User::a, &u, placeholders::_1);
//通过对象调用
function<int(int)> f2 = bind(&User::a, u, placeholders::_1);
f(1);
f2(2);
}
placeholders::_1 是一个展位符,如果User::a 存在两个形参,int a(int b,int c) 那么就需要在bind 函数后面在添加一个placeholders::_2 作为展位符
如果有更多参数的话以此类推就可以了
int a(int b,int c) {
cout << "芜湖";
return b;
}
function<int(int,int)> f = bind(&User::a, &u, placeholders::_1, placeholders::_2);
//如果需要更多形参,那么就往后面添加placeholders::_3 placeholders::_4......
存在模板
和不存在模板基本相同代码
template <typename T>
class User {
public:
int a(T b,T c) {
cout << &q
|