Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用bind或lambda将空函数指针传递给类构造函数_C++_C++11_Lambda_Bind - Fatal编程技术网

C++ 使用bind或lambda将空函数指针传递给类构造函数

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

我已经开始钻研C++11,但是我在理解可以使用bind和lambdas的正确上下文时遇到了困难

具体地说,我想创建一个类,该类接收指向某些类的指针,并创建一个int-ID,告知传递了哪个可用的类指针。所有其他指针都设置为NULL。该函数接受几个指针,而不是定义一大堆
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
)。虽然现在我意识到这是一种不可靠的方法。。。