gpt4 book ai didi

c++ - 对派生类隐藏基类的实现细节

转载 作者:行者123 更新时间:2023-11-30 04:03:37 26 4
gpt4 key购买 nike

假设我们有一个基类 A 和一个派生类 B:

struct A
{
A(int a) : a(a) {}
int a;
};

struct B : public A
{
B(int a, int b) : A(a), b(b) {}
int b;
};

有没有办法在不知道 A 类的构造函数的情况下定义 B 类?例如,工厂类可能负责用于提供 A 类需要的数据,但 B 类的编写者不必知道任何相关信息。基本上假设我们不委托(delegate)构造函数是否可以先初始化对象的 A 类部分,然后使用另一组构造函数参数初始化 B 部分?

最佳答案

您可以使用可变参数模板构造函数,将其参数转发给基类 [1]

struct B : public A
{
template<typename...Ts>
B(int b, Ts&&...args) : A(std::forward<Ts>(args)...), b(b)
{
}
int b;
};

但是除非 [2] 基类本身就是一个通用方面,否则以上内容不会有任何实际用途,例如

template<typename Base>
struct B : public Base
{
template<typename...Ts>
B(int b, Ts&&...args) : Base(std::forward<Ts>(args)...), b(b)
{
// above the initialization of b (its related argument)
// are not part of the variadic pack
}
int b;
};

Example


1。以上暗示相关的工厂方法也使用可变参数模板

2。只考虑一个类,它想要构造它的基类,而不知道它是从多少变量或什么类型的变量构造而来的。用途可能因上下文而异

关于c++ - 对派生类隐藏基类的实现细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com