C++ 使用bind或lambda将空函数指针传递给类构造函数
我已经开始钻研C++11,但是我在理解可以使用bind和lambdas的正确上下文时遇到了困难 具体地说,我想创建一个类,该类接收指向某些类的指针,并创建一个int-ID,告知传递了哪个可用的类指针。所有其他指针都设置为NULL。该函数接受几个指针,而不是定义一大堆C++ 使用bind或lambda将空函数指针传递给类构造函数,c++,c++11,lambda,bind,C++,C++11,Lambda,Bind,我已经开始钻研C++11,但是我在理解可以使用bind和lambdas的正确上下文时遇到了困难 具体地说,我想创建一个类,该类接收指向某些类的指针,并创建一个int-ID,告知传递了哪个可用的类指针。所有其他指针都设置为NULL。该函数接受几个指针,而不是定义一大堆ClassX*clX=NULL,我希望该函数只接受一个指针和相应的ID 我把我的“测试”文件放在下面。有人能看出它有什么问题吗?我还是很新的C++(在Matlab中开始),所以如果你看到任何风格问题,请告诉我。p> #include
ClassX*clX=NULL
,我希望该函数只接受一个指针和相应的ID
我把我的“测试”文件放在下面。有人能看出它有什么问题吗?我还是很新的C++(在Matlab中开始),所以如果你看到任何风格问题,请告诉我。p>
#include <iostream>
#include <functional>
using namespace std;
using namespace std::placeholders;
class ClassB1 {
public:
ClassB1() {}
};
class ClassB2 {
public:
ClassB2() {}
};
class ClassB3 {
public:
ClassB3() {}
};
class ClassA {
public:
ClassA(ClassB1* b1, ClassB2* b2, ClassB3* b3, int ID) {
//Find look at ID and do something with appropiate class pointer
}
};
int main()
{
ClassA lambdaFunc = [] (ClassB1* _b1, int id) { return ClassA::ClassA(_b1, NULL, NULL, id)};
ClassA bindFunc = bind(ClassA::ClassA,_1,NULL,NULL,_2);
ClassB1 _b1 = ClassB1();
_id = 1;
lambdaFunc(&_b1, _id);
bindFunc(&_b1, _id);
}
#包括
#包括
使用名称空间std;
使用名称空间std::占位符;
B1类{
公众:
类B1(){}
};
类别B2{
公众:
类B2(){}
};
类别B3{
公众:
ClassB3(){}
};
甲级{
公众:
ClassA(ClassB1*b1,ClassB2*b2,ClassB3*b3,内部ID){
//查找查找ID并使用适当的类指针执行某些操作
}
};
int main()
{
ClassA lambdaFunc=[](ClassB1*b1,int-id){返回ClassA::ClassA(b1,NULL,NULL,id)};
ClassA bindFunc=bind(ClassA::ClassA,_1,NULL,NULL,_2);
ClassB1 _b1=ClassB1();
_id=1;
lambdaFunc(&_b1,_id);
bindFunc(&_b1,_id);
}
如果出于某种奇怪的原因,您坚持使用lambda解决此问题,请务必使用
auto lambdaFunc = [] (ClassB1* _b1, int id) {
return ClassA(_b1, NULL, NULL, id);
};
ClassB1 _b1;
int _id = 1;
ClassA a = lambdaFunc(&_b1, _id);
虽然我必须承认,我不太明白这个练习的意义。没有意识到课程的顺序很重要;编辑后,ClassA低于ClassB1-3。正常的解决方案是使用重载和默认参数:
A(B1*B1=0,B2*B2=0,B3*B3=0);A(B2*B2=0,B3*B3=0);A(B3*B3=0)代码>-不需要ID。编译器将找出您传递的类型。使用模板,您甚至可以避免对参数排序,但该代码不适合注释。这是一个简化的提示,我需要它根据调用它的类显示不同的类信息(它们都传递This
)。虽然现在我意识到这是一种不可靠的方法。。。