将返回的类型分配给一个脱口机类型

Assign returned type to a derrived type

本文关键字:类型 一个 口机 返回 分配      更新时间:2023-10-16

一个人可以解释(/指向我(正确的方向或给出一个简单的示例。我使用的是API函数,它返回了A型的指针A。

我如何适当地,将A的API分配/初始化为B的API返回的指针到B的实例,以便我调用我的额外功能。

大多数人采用的方法不是扩展a以添加成员函数,而是添加一个新的常规函数,该函数以 A&类型的参数。当您需要访问班级的内部设备时,成员函数应仅使用

如果您确实需要访问(受保护的(成员,则可以为B添加一个初始化基类的构造函数:

class B : A {
    B(A a) : A(std::move(a)) {}
}

,然后只是

B value = get_the_A();

这要求A是可复制的或可移动的。如果不是,那么这是不可能的。

您可以为您的扩展类提供适当的构造函数,该类接受基类并按照您想要的方式扩展。

例如:

struct A {
    A(A& a) : a_(a.a_) {}
    A(int a) : a_(a) {}
    int a() { return a_; }
private:
    int a_;
};
struct B : A {
    B(A a) : A(a), b_(100) {}
    int b() { return b_; }
private:
    int b_;
};
A* thirdPartyFcn() {
    return new A(97);
}
int main()
{
    B b(*thirdPartyFcn());
    std::cout << b.a() << std::endl;
    std::cout << b.b() << std::endl;
}

请注意,它希望基类具有复制构造函数。

如果您的新功能不是虚拟函数,则简单的static_cast<B *>(functioncall())就可以做到。它是未定义的行为,但应在所有编译器上使用。我不建议这种方法。仅当您需要访问A的内部且没有其他解决方案时,才使用此方法。

我建议添加一个简单的独立函数,该函数将A *作为参数,而不是扩展A

相关文章: