将返回的类型分配给一个脱口机类型
Assign returned type to a derrived type
一个人可以解释(/指向我(正确的方向或给出一个简单的示例。我使用的是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
。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 构造函数正在调用一个使用当前类类型的函数
- 引用一个已擦除类型(void*)的指针
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 在c++中为double类型的数组创建一个unique_ptr
- 当基类是依赖类型时,这是一个缺陷吗
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- C++将一个指针分配给另一个指针时执行的类型检查
- 模板函数如何处理可能共享一个交集的多个类型名称?
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- 取消引用结束指针到数组类型的一个
- 为什么转换函数声明不需要至少一个定义类型说明符
- 如何包装一个函数以适应另一个函数的所需类型
- 使用C++生成泛型类型-一个具有共享实现的模板