如何在C ++模板类之间共享受保护的成员?

时间:2014-10-01 17:27:22

标签: c++ templates

考虑以下示例:

class _ref
{
public:
    _ref() {}
    _ref(const _ref& that) {}
    virtual ~_ref() = 0;
};
_ref::~_ref() {}

template <typename T>
class ref : public _ref
{
protected:
    ref(const _ref& that) {}

public:
    ref() {}
    ref(const ref<T>& that) {}
    virtual ~ref() {}

    template <typename U>
    ref<U> tryCast()
    {
        bool valid;
        //perform some check to make sure the conversion is valid

        if (valid)
            return ref<U>(*this); //ref<T> cannot access protected constructor declared in class ref<U>
        else
            return ref<U>();
    }
};

我希望所有类型的'ref'对象能够访问彼此的受保护构造函数。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:7)

template <typename T>
class ref : public _ref
{
    template <typename U>
    friend class ref;
    //...

DEMO