gpt4 book ai didi

c++ - 在 C++ 中避免继承层次结构中的重复代码

转载 作者:行者123 更新时间:2023-11-28 08:00:52 24 4
gpt4 key购买 nike

在我的一个继承层次结构中,我遇到了一些重复代码的问题。我怎样才能避免重复函数 smile() 中的代码?

鉴于变量 _a基类中不存在我无法将函数移到那里。还创建了一个像这样的模板函数 template<typename T> void smile(T& a) { a++; }对我来说不是真正的解决方案。我的实际代码有点复杂,这样的解决方案即使不是不可能应用到我当前的设计中也会非常困惑。

class com
{
public:
com(int x, float y) : _x(2), _y(1.15f)
{ }
protected:
// Common functions go here .We need this base class.
protected:
int _x;
float _y;
};

class com_int : public com
{
public:
void fill()
{ _a = std::max(_x, (int)_y); }
protected:
int _a;
};

class com_real : public com
{
public:
void fill()
{ _a = std::min((float)_x, _y); }
protected:
float _a;
};

class happy_int : public com_int
{
public:
void smile() { _a ++; } // BAD: Will be duplicated
};

class happy_float : public com_real
{
public:
void smile() { _a ++; } // BAD: Duplicated code
}

class sad_int : public com_int
{
public:
frown() { _a --; }
}

此外,有人知道一本教如何使用 OOP 和模板原则实际设计 C++ 代码的好书吗?

最佳答案

您可以从另一个辅助模板继承:

template <typename T, typename Derived> struct filler
{
T _a;
void fill()
{
com & b = static_cast<Derived&>(*this);
_a = std::min(b._x, b._y);
}
};

用法:

struct com_int : com, filler<int, com_int> { };

关于c++ - 在 C++ 中避免继承层次结构中的重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496525/

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