C++:从一个基类模板到另一个基类模板的动态转换

标签 c++ multiple-inheritance dynamic-cast

鉴于下面的类结构,我想调用 struct C<O> 中的方法来自 struct B 中的方法. C<O> follows 遵循奇怪的重复模板模式。我想在不将方法放在 struct O 中的情况下执行此操作.在 struct O 中放置方法会破坏 struct C<> 的目的.我怀疑这是不可能的,但我想我会问。

编辑: struct O可以是同时具有 struct B 的一组类型中的任何一种。和 struct C<O>作为基类。

struct B
{
    virtual void foo ()
    {
        // dynamic_cast this to C<O>* and call C<O>::moo()
    }
};

template <typename P>
struct C
{
    virtual void moo () { }
};

struct O :
    public B,
    public C<O>
{
};

最佳答案

如果您按照 O 的定义外联地定义 foo,它工作正常:

struct B
{
    virtual void foo();
};
template <typename P>
struct C
{

    virtual void moo() {}
};    

struct O :
    public B,
    public C<O>
{
};

void B::foo()
{
    dynamic_cast<C<O>*>(this)->moo();
}

关于C++:从一个基类模板到另一个基类模板的动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47762217/

相关文章:

python - 在 C++ 中运行经过训练的 keras 模型

c++ - 在 VSCode 中只看到局部变量调试 C++

c++ - 具有多个非默认构造函数基础的单例派生类

python - cython cdef类的多重继承

c++ - 如果没有单个虚函数,dynamic_cast 是否表现为 static_cast?

c++ - 从基指针到派生指针的转换问题

c# - 通过 .exe 文件名杀死一些进程

c++ - 在 MFC 中更改按钮的光标

c++ - 多重虚继承是否像虚函数的继承那样涉及后期绑定(bind)?

c++ - dynamic_cast 与在父类中公开虚函数 (C++)