在另一个 class 中包含一个需要为其构造函数输入参数的 class
Including a class requiring a input argument to its constructor in another class
我有一个第三方库,它定义了一个 class 如下
class ClassA{
public:
explicit(std::string token) : _token(token);
inline const std::string& getToken() const{
return _token;
}
// Other functions
// ...
private:
const std::string _token;
// other members
// ...
};
我正在尝试让 class 成为另一个 class 的成员。但是,由于 ClassA
需要带有输入参数的构造函数,是否有解决方法来定义另一个 class 来获取 token
并创建一个对象?
class ClassB{
ClassB(std::string token) : m_TOKEN(token){ setBot(); };
void setBot(){
m_classA(m_TOKEN); // I know this does not work, it is just to illustrate my question.
};
private:
std::string m_TOKEN;
ClassA m_classA;
}
正如所写,您的ClassB
将不起作用,因为ClassA
没有默认构造函数,因此您必须在[=的成员初始化列表中初始化m_classA
12=]的构造函数。如果要setBot()
重置m_ClassA
,则必须构造一个新的ClassA
对象。
class ClassB{
ClassB(std::string token) : m_TOKEN(token), m_classA(token) { };
void setBot(){
m_classA = ClassA(m_TOKEN);
};
private:
std::string m_TOKEN;
ClassA m_classA;
}
否则,如果您不想在构造函数的成员初始化列表中初始化m_ClassA
,那么您将不得不动态构造m_ClassA
。
class ClassB{
ClassB(std::string token) : m_TOKEN(token) { setBot(); };
void setBot(){
m_classA = std::make_unique<ClassA>(m_TOKEN);
};
private:
std::string m_TOKEN;
std::unique_ptr<ClassA> m_classA;
}
我有一个第三方库,它定义了一个 class 如下
class ClassA{
public:
explicit(std::string token) : _token(token);
inline const std::string& getToken() const{
return _token;
}
// Other functions
// ...
private:
const std::string _token;
// other members
// ...
};
我正在尝试让 class 成为另一个 class 的成员。但是,由于 ClassA
需要带有输入参数的构造函数,是否有解决方法来定义另一个 class 来获取 token
并创建一个对象?
class ClassB{
ClassB(std::string token) : m_TOKEN(token){ setBot(); };
void setBot(){
m_classA(m_TOKEN); // I know this does not work, it is just to illustrate my question.
};
private:
std::string m_TOKEN;
ClassA m_classA;
}
正如所写,您的ClassB
将不起作用,因为ClassA
没有默认构造函数,因此您必须在[=的成员初始化列表中初始化m_classA
12=]的构造函数。如果要setBot()
重置m_ClassA
,则必须构造一个新的ClassA
对象。
class ClassB{
ClassB(std::string token) : m_TOKEN(token), m_classA(token) { };
void setBot(){
m_classA = ClassA(m_TOKEN);
};
private:
std::string m_TOKEN;
ClassA m_classA;
}
否则,如果您不想在构造函数的成员初始化列表中初始化m_ClassA
,那么您将不得不动态构造m_ClassA
。
class ClassB{
ClassB(std::string token) : m_TOKEN(token) { setBot(); };
void setBot(){
m_classA = std::make_unique<ClassA>(m_TOKEN);
};
private:
std::string m_TOKEN;
std::unique_ptr<ClassA> m_classA;
}