我有一组课程。底层类很难被用户利用,并且违反了封装设计方案:用户必须知道底层代码如何工作才能初始化类。
相反,我试图为继承的类的构造函数创建一个构造函数包装器。这是我想要做的最小例子。
#include <iostream>
#include <vector>
using namespace std;
class classA{
public:
int a;
int b;
explicit classA(int a,int b){
this->a = a;
this->b = b;
}
};
class classB{
public:
int a;
int b;
explicit classB(int a,int b){
this->a = a;
this->b = b;
}
};
class classC{
public:
vector<classA> a_team;
vector<classB> b_side;
explicit classC(vector<classA> vca,vector<classB> vcb){
this->a_team = vca;
this->b_side = vcb;
}
};
class SpecificClass:public classC{
using classC::classC;
现在,我将如何添加额外的构造函数,以使代码在特定设置中更有用:
SpecificClass(classA ca, classA ca2, classB cb){ // <---------- This fails
// somehow, I call:
classC({ca,ca2},{cb});
}
// How do I do this ^^^^ (C++11)
};
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
不是那些不编译的行是:
SpecificClass(classA ca, classA ca2, classB cb){ // <---------- This fails
// somehow, I would initialize the class here after
// interpreting the inputs...
classC({ca,ca2},{cb});
}
我如何在C ++ 11中实现此功能?
答案是:
符号的工作方式是wrapper_function(parameters)
- &gt;构造函数。
代替lambda表示法的箭头是:
,其中三元条件运算符的后半部分和范围分辨率运算符的一半被用作设置符号(或者更可能) ,英语冒号),代替传统的函数符号(可能选择以避免与指针符号混淆)。
因此,这是一个关闭的替代符号lambda函数,将输入映射到构造函数。