调用继承方法
Call inherited method
我有一个名为"Packet"的基类,具有以下方法:
template <typename T>
void write()
{
//DoSomething
writeHandler<T>();
}
和一个名为PacketA的子类,它们为每个处理程序
实现模板专门化方法。在packketa中,我想写一个名为B()的方法,如下所示
public function B() { write<MySpezialisation>(); }
我假定它将调用Packet::write with我的专业化writeHandler
如果我有我的基类Packet::write<MySpecialisation>();}
它没有调用我的模板特殊化方法。
怎么了
#ifndef CLIENTIPPACKET_H
#define CLIENTIPPACKET_H
/*INCLUDES SKIPPED*/
class PacketA : public Packet
{
public:
struct MySpecialization
{
};
PacketA() : Packet() {}
private:
template<typename T> void writeHandler();
public:
void write() { Packet::writeHandler<MySpezialisation>(); }
};
template<>
void PacketA::writeHandler<PacketA::MySpecialization>()
{
//DOSOMETHING
}
#endif
您如何期望您的Packet
理解writeHandler()
应该来自PacketA
?writeHandler()
不是虚拟的(也不能是,因为它是模板化的),所以Packet
将始终使用自己的版本。
我可以建议重写为
template <typename T, typename P>
void write(T data, P& packet)
{
m_data.clear();
getStream()->atStart();
packet.writeHandler<T>(data);
getStream()->atStart();
}
和PacketA
public function B() { write<MySpezialisation>(data, *this); }
(您是否在您的代码中忘记了data
?)
但是,根据您的特定设计需求,可能存在更好的方法。
相关文章:
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 打印所有继承的类成员变量和方法
- C++继承 - 为什么调用父方法?
- 继承:调用基类的成员和方法
- 如何继承返回对当前对象的引用的方法?
- C++接口继承不同的参数方法
- 循环依赖,在继承类的情况下使用覆盖方法
- 如何重写继承的嵌套类中存在的虚拟方法
- C++获取所有继承类信息的方法
- CPP 继承虚拟方法解析顺序
- 为什么我可以通过SubBase类的公共继承方法打印出基类的私人继承成员
- 从基类调用继承类的方法.C++
- 工厂方法模式使用继承而抽象工厂模式使用组合如何
- 继承构造函数和其他变量的解决方法
- 解决虚拟方法的歧义继承的两种方法
- C++ 中的类和方法继承
- 与其他模板方法继承 C++ 模板类
- C++类方法继承
- C++对象中的构造函数继承与方法继承
- 类方法继承中的C++类