Jak mohu prohlásit, std :: pair jako kamarád, takže to vidí vlastní výchozí ctor

hlasů
0

Já používám boost (de) serializace rekonstruovat tříd bez výchozích ctors veřejných, záměrné. Prohlašuji, vlastní výchozí ctor a deklarovat třídu přístupový boost jako přítele, a to používá výchozí ctor jako součást svého deserializace procesu. Ale to nemůže rekonstruovat std::pair, pokud udělám výchozí ctor veřejnosti. Raději bych určil, přátelství, ale nemohu přijít na to, jak na to.

Níže je uveden zjednodušený příklad:

class PrivateDC
{
private:
    friend class PrivateDCFriend;
    friend struct std::pair<int, PrivateDC>;
    PrivateDC() = default;
};
class PrivateDCFriend
{
    void f() const
    {
        PrivateDC a;                  // this works, proves friendship
        std::pair<int, PrivateDC> b;  // gets compile error
    }
};

Chyba je „žádná odpovídající konstruktor pro inicializaci‚std :: pair <int, PrivateDC>‘“. Nechápu chybu, pokud je výchozí ctor je veřejná.
Jak mohu prohlásit std::pairza přítele, takže to bude fungovat?

Položena 07/11/2018 v 23:32
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
2

Nemůžeš,

Výchozí konstrukce std::pair<T, U>vyžaduje, aby oba Ti Use DefaultConstructible a PrivateDCnení, není-li u tohoto požadavku způsobí výchozí konstruktor std::pairjsou vyloučeny z množiny přetížení.

Odpovězeno 08/11/2018 v 00:04
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more