#include <iostream>
using namespace std;
#include <functional> //std::function 头文件
//传统的函数指针
typedef int(*fun0)(int n);
int testfun(int n)
{
return n;
}
//Lambda表达式
class CBase
{
};
class CA : public CBase
{
public:
CA(int n) : m_id(n) {}
int getid() { return m_id; }
private:
int m_id;
};
class CB : public CBase
{
public:
CB(int n) : m_id(n) {}
int getid() { return m_id; }
private:
int m_id;
};
#define CL(__className__) [](int n){ return new __className__(n); }
int main()
{
//函数指针
fun0 pfun0 = testfun;
cout << pfun0(888) << endl;
//lambda表达式
std::function<CBase*(int)> funA = CL(CA);
CBase* pA = funA(1);
cout << ((CA*)pA)->getid() << endl;
std::function<CBase*(int)> funB = CL(CB);
CBase* pB = funB(2);
cout << ((CB*)pB)->getid() << endl;
system("pause");
return 0;
}
using namespace std;
#include <functional> //std::function 头文件
//传统的函数指针
typedef int(*fun0)(int n);
int testfun(int n)
{
return n;
}
//Lambda表达式
class CBase
{
};
class CA : public CBase
{
public:
CA(int n) : m_id(n) {}
int getid() { return m_id; }
private:
int m_id;
};
class CB : public CBase
{
public:
CB(int n) : m_id(n) {}
int getid() { return m_id; }
private:
int m_id;
};
#define CL(__className__) [](int n){ return new __className__(n); }
int main()
{
//函数指针
fun0 pfun0 = testfun;
cout << pfun0(888) << endl;
//lambda表达式
std::function<CBase*(int)> funA = CL(CA);
CBase* pA = funA(1);
cout << ((CA*)pA)->getid() << endl;
std::function<CBase*(int)> funB = CL(CB);
CBase* pB = funB(2);
cout << ((CB*)pB)->getid() << endl;
system("pause");
return 0;
}
本文通过C++代码示例介绍了如何使用传统函数指针、Lambda表达式及std::function来创建和使用不同类型的对象。展示了通过Lambda简化对象创建的过程,并比较了不同方法的实现方式。
2212

被折叠的 条评论
为什么被折叠?



