派生类上的 C++ 模板转换

标签 c++

我有 3 个相互派生的类:

class Basic{
...
}

class Extended : public Basic{
...
}

class Full : public Extended{
...
}

我有一个模板类,其中包含来自此类的 5-5 个:

template <class T>
    class group{
    public:
             ...
    private:
        T one, two, three, four, five;
    };

group<Basic> basicGroup;
group<Extended> extendedGroup;
group<Full> fullGroup;

我可以轻松地将 fullGroup 转换为 basicGroup 或将 extendedGroup 转换为 basicGroup 吗? (我只想向上投)

最佳答案

一种解决方案是创建一种可以包装组的 View 类,并将单个对象公开为基类实例:

template <class T>
class group{
public:
    const T & getOne() { return one; }
private:
    T one, two, three, four, five;
};

template <class T, U>
class group_view {
public:
    group_view(group<T> & inner) : innerGroup(inner) {}

    const U & getOne() { return dynamic_cast< const U &>(one); }
private:
    group<T> & innerGroup;
};

你可以这样使用它:

group<Full> fullGroup;
group_view<Full, Extended> extendedGroupView(fullGroup);

如果将group 的公共(public)接口(interface)提取到一个抽象基类中,您甚至可以多态地使用group_view

关于派生类上的 C++ 模板转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096655/

相关文章:

c++ - 如何在不结束螺旋而不是盘旋的情况下提高 Sprite 速度

c++ - 用于捕获 10 Gbps NIC 的 libpcap

c++ - 所有 .txt 文件的列表

c++ - 异常安全和 make_unique

c++ vector 插入意外行为

c++ - 为什么我的模板特化检查不足以正确处理相应的类型?

c++ - 找不到 highgui100d.dll,我在网上搜索过,但一无所获

c++ - C++ 中的类方法

c++ - C2995 : template already defined

c++ - (C++)。非unicode语言(简体中文)输入/输出