gpt4 book ai didi

c++ - 仅静态常量成员不同的两个子类

转载 作者:行者123 更新时间:2023-11-28 05:29:00 26 4
gpt4 key购买 nike

我有一个类(class) A 和两个 child BC 如下:

class A {
private:
int x;
template<class T>
void setX(T &y);

public:
A();
};
class B : public A {
private:
static const double y;

public:
B();
};
class C : public A {
private:
static const int y;

public:
C();
};

两个 child 的区别仅在于它们的静态成员 y 的类型。除了静态成员的初始化之外,C 和 B 的实现是相同的:

B::B() : y (1.2) { setX(y) } 
C::C() : y (2) { setX(y) }

但这种方法的问题是,在实现文件中,我必须为 BC 编写两次相同的代码。有没有合适的方法来编写这个,这样我就不需要编写两次对 setX 的调用?

在实际问题中,类稍微复杂一些,但手头的情况是一样的。特别是,y 的初始化需要非平凡的构造函数,因此它必须在实现文件中。

最佳答案

您可以为 A 编写构造函数作为函数模板。

class A {
//....
public:
template<typename T>
explicit A(T& y) {
setX(y);
}
};

然后从子类中调用该构造函数:

class B : public A{
//...
public:
B() : A(1.2), y(1.2)
{}
};

唯一的问题是基类构造函数首先被调用,因此您需要重复常量数据值两次。不过,您可以轻松地对其进行宏设置。

关于c++ - 仅静态常量成员不同的两个子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39936850/

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