c++ - 在模板函数中调用继承的方法

标签 c++ templates inheritance

我在父类中有一个模板方法,它应该调用基类中的另一个方法。如果在基类中显式定义了该方法,它就可以工作,但是如果继承了该方法,它就不起作用。我无法弄清楚这段代码到底出了什么问题(虽然我知道这有点奇怪:)

class A
{
protected:
    virtual void someMethod() 
    {
    }

    template <class TBaseClass>
    void templateMethod()
    {
        TBaseClass::someMethod();
    }

};

class B : public A 
{   

};

class C : public B
{

protected:
    virtual void someMethod()
    {
        templateMethod<A>(); // this works
        templateMethod<B>(); // this doesn't
    }

};

这以编译器错误结束:

error C2352: 'A::someMethod' : illegal call of non-static member function

到底哪里出了问题?我不是在寻找解决方法,这很容易。我想知道为什么这是不正确的。

最佳答案

template <TBaseClass> void A::templateMethod()祈求者,this , 类型为 A * .因此,当您尝试调用 B::someMethod 时在其上,编译器不会将其识别为对象方法调用,因为 B不是基类,但它仍然可以是静态方法调用,所以编译器会尝试,找到 B::someMethod通过 A 继承并提示它不是静态的。事实Athis 的基类不相关;只有那个B不是。

关于c++ - 在模板函数中调用继承的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26867301/

相关文章:

c++ - 编译模板

python - 为基类的所有子类创建一个可哈希的 id

c++ - 将 Boost strand 与 std::future 结合使用

c++ - 无法在 C++ 中与虚拟继承自它的类成为 friend

C++ 错误 - 架构 x86_64 的 undefined symbol :

c++ - C++中一些基本的模板问题

javascript - 灰尘模板包含多次

typescript - 在 VUE 中,哪种共享模板和逻辑的方法更受欢迎?

c++ - 我可以在 C++11 的类外执行继承吗?

c++ - IEEE - 754 - 查找符号位、指数、frac、归一化等