设计这样的课时我遇到了麻烦
class C1 {
public:
void foo();
}
class C2 {
public:
void foo();
}
Run Code Online (Sandbox Code Playgroud)
C1和C2有相同的方法foo(),
class Derived1 : public Base {
public:
void Update() {
member.foo();
}
private:
C1 member;
}
class Derived2 : public Base {
public:
void Update() {
member.foo();
}
private:
C2 member;
}
Run Code Online (Sandbox Code Playgroud)
Derived类的Update()完全相同,但成员的类型不同.所以我必须为每个新的派生类复制Update工具.
这是减少此代码重复的方法吗?我只提出了一个宏的解决方案.我认为有一种更优雅的方式来解决这个模板,但我无法弄清楚..
编辑: 非常感谢,但我想我错过了一些东西..
我正在使用c ++
2.实际上,每个Derived类都有大约5个成员,它们都支持foo()方法,并且派生自相同的基类.我的情况是我已经编写了一个(非常长的)Update()方法,它可以适用于每个派生类而无需任何修改.所以我只是将这个Update()复制并粘贴到每个新类的Update()中,这会导致可怕的代码重复.我想知道是否有一种方法我不需要过多地重写Update()并且可以减少重复.
再次
这正是类模板的设计应用程序.它们允许类中的函数在不同的数据类型上运行,而无需复制算法和逻辑.
这个维基百科页面将为您提供编程模板的良好概述.
这是让您入门的基本想法:
template <class T>
class CTemplateBase
{
public:
void Update()
{
member.foo();
}
private:
T member; // Generic type
}
class CDerived1 : public CTemplateBase<C1>
{
// No common algorithms required here
}
class CDerived2 : public CTemplateBase<C2>
{
// No common algorithms required here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |