7 Stimmen

Wie teilt man geschützte Elemente zwischen C++ Template-Klassen?

Betrachten Sie das folgende Beispiel:

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

template 
class ref : public _ref
{
protected:
    ref(const _ref& that) {}

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

    template 
    ref tryCast()
    {
        bool valid;
        // Führen Sie einige Überprüfungen durch, um sicherzustellen, dass die Konvertierung gültig ist

        if (valid)
            return ref(*this); // ref kann auf geschützten Konstruktor in Klasse ref nicht zugreifen
        else
            return ref();
    }
};

Ich möchte, dass alle Arten von 'ref'-Objekten auf die geschützten Konstruktoren der anderen zugreifen können. Gibt es eine Möglichkeit, dies zu erreichen?

12voto

Piotr Skotnicki Punkte 45157
template 
class ref : public _ref
{
    template 
    friend class ref;
    //...

DEMO

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X