请考虑以下代码:
template.h
template<typename T>
class templ{
public:
virtual const int virtualMethod(const T *const) const = 0;
}
Base.h
#include "template.h"
class Der1;
class Der2;
class Base :
public templ<Base>,
public templ<Der1>,
public templ<Der2>{
public:
virtual ~Base(){}
};
Der1.h
#include "Base.h"
class Der1 : public Base {
public:
virtual const int virtualMethod(const Base *const) const override;
virtual const int virtualMethod(const Der1 *const) const override;
virtual const int virtualMethod(const Der2 *const) const override;
};
Der1.cpp
#include "Der1.h"
const int Der1::virtualMethod(const Base *const sth) const{
return sth->templ<Der1>::virtualMethod(this);//does not work
//how to fix it?
}
const int Der1::virtualMethod(const Der1 *const sth) const{
//do sth
}
const int Der1::virtualMethod(const Der2 *const sth) const{
//do sth
}
Der2类也继承自Base并实现这三个功能。
对于这段代码,编译器会给我这些消息:
一般来说,代码的想法是实现双类型调度。虽然我想我知道是什么原因引起了问题,但我不知道如何解决它。也许你可以帮助我。
答案 0 :(得分:0)
我有点困惑你的意图是什么......
但是怎么样:
const int Der1::virtualMethod(const Base *sth) const {
return dynamic_cast<const templ<Der1> *>(sth)->virtualMethod(this);
}