c – 模板的“基类”?
作者:互联网
(抱歉模糊的标题)
我有一个基类B与各种派生类D1,D2等.
此外,我有一个模板
template <class T> Storage;
现在,每个派生类都有不同版本的Storage类
class D1 : public class B {
Storage<int> *myStorage;
void action1();
void specific_D1_action();
// other stuff...
}
class D2 : public class B {
Storage<float> *myStorage;
void action1();
void specific_D2_action();
// other stuff...
}
D1 :: action1()和D2 :: action1()使用它们各自的myStorage并具有完全相同的代码.但是,各个myStorage对象的实际模板参数不同.
是否有可能为所有版本的存储提供一种“基类”,
这样我就可以在基类B中定义myStorage和action1(而不是D1,D2,…)以避免代码重复?
我认为我不能“模糊”基类B,因为派生类中的特定操作.
(这个例子非常简单 – 在实际情况下,模板参数是复杂的类)
解决方法:
创建一个继承自B基类并获取模板参数的基类?
class B
{
// ...
};
template<typename T>
class DerivedBase : public B
{
Storage<T> *myStorage;
void action1();
};
class D1 : public DerivedBase<int>
{
void specific_D1_action();
};
class D2 : public DerivedBase<float>
{
void specific_D2_action();
};
标签:derived,base-class,c,templates 来源: https://codeday.me/bug/20190725/1538379.html