在另一个 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;    
}