Wie erhalte ich Zugang zu einem privaten Konstruktor in eine eigene Klasse?

Ich Schreibe eine library in C++. Ich habe zwei Klassen, die in " meine Bibliothek A und B. Ich will zu verstecken A() Konstruktor von code, Referenzen meiner Bibliothek. Ich möchte auch Klasse B zu können, rufen Sie die A() Konstruktor.

Komme ich aus einer C# - hintergrund und erinnern wenig an meine C++. In C# würde ich einfach erklären, die A() Konstruktor als internal. Ich habe gelesen, dass die nächste Möglichkeit in C++ ist eine Kombination von friend Erklärungen und forward-Deklarationen. Wie mache ich das? Hier sind meine drei Dateien unter:

A. h:

#pragma once
class A
{
    private:
        A();
};

B. h

#pragma once
class A;
class B
{
    public:
        A createA();
};

B.cpp:

#include "A.h"
#include "B.h"

A B::createA()
{
    A result; //cannot access private member declare in class 'A'
    return result;
}

Ich habe versucht, indem diese a-h:

public: friend A createA();

Ich habe stattdessen versucht, indem diese a-h mit einem entsprechenden forward-Deklaration:

public: friend A B::createA();

Ich habe stattdessen versucht, hinzufügen und extern class B; zu a-h und das B eine Klasse wie folgt aus:

public: friend class B;

Bin ich ratlos.

Ich denke, das könnte einfacher sein, wenn ich die B::createA() Funktion gibt einen Zeiger auf eine A - Objekt, anstatt ein A Objekt direkt, aber das geht nicht in meinem Fall. Ich bin emuliert eine geschlossene API und der API-Aufruf gibt einen A Objekt, sondern einen Zeiger.

InformationsquelleAutor user2023861 | 2013-09-09

Schreibe einen Kommentar