考虑以下代码:

template.h

template<typename T>
class templ{
public:
    virtual const int virtualMethod(const T *const) const = 0;
}

基数
#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并实现了这三个功能。

对于此代码,编译器向我提供了以下消息:
  • 'templ'是模糊的'候选者是:templ()templ(const
    templ&)templ()templ(const templ&)templ()
    templ(const templ&)'
  • 函数'virtualMethod'无法解析
  • 命名空间成员函数'virtualMethod'无法解析。
  • 类型'Der1'无法解析。
  • undefined reference
    `templ::virtualMethod(Der1 const *)const'

  • 通常,代码的想法是实现双重类型分派(dispatch)。尽管我认为我知道导致问题的原因,但我不知道如何解决。所以也许您可以帮助我。

    最佳答案

    我有点困惑,你的意图是...

    但是关于:

    const int Der1::virtualMethod(const Base *sth) const {
         return dynamic_cast<const templ<Der1> *>(sth)->virtualMethod(this);
    }
    

    关于c++ - 模板接口(interface)的多重继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31212791/

    10-11 00:49