Accéder à un constructeur privé d'une classe de modèle en C ++

au moins

J'ai quelques difficultés à essayer d'accéder à un constructeur privé d'une classe dérivée, qui est spécifiée en tant que paramètre de modèle. J'espérais que la spécification friend Trésoudrait le problème, mais malheureusement, cela n'a aucun effet.

template <typename T>
class Creator
{
public:

    static void Create()
    {
        instance = new T;
    }
private:
    static T* instance;
    friend T;
};

template <typename T>
T* Creator<T>::instance(nullptr);

class Test
{
private:
    Test() {}
};

Tentative de création:

int main()
{
     Creator<Test>::Create();
}

L'erreur que j'obtiens est:

Erreur C2248 'Derived :: Derived': impossible d'accéder au membre privé déclaré dans la classe 'Derived'

Des idées sur la façon dont je pourrais résoudre ce problème s'il vous plaît?

bku_drytt

Votre classe Creator n'a pas besoin de donner à un ami l'accès à son paramètre de modèle.

template <typename T>
class Creator
{
public:

    static void Create()
    {
        instance = new T;
    }
private:
    static T* instance;
    // friend T; NOT USEFUL
};

Vous devez fournir un accès ami à partir de la classe qui a le membre privé.

class Test
{
    friend Creator<Test>; // provide friend access to Creator<Test> specialization
private:
    Test()
    {
    }
};

Cela permet à votre code de se compiler et d'obtenir le comportement souhaité.

Pour mémoire, en déclarant friend T;dans votre classe de modèle, vous exposez en fait vos membres privés à tout T dans lequel vous vous spécialisez avec Creator. Vous pourriez donc faire écrire à quelqu'un ...

class Test
{
private:
    Test()
    {
        // you don't really want this, do you?
        delete Creator<Test>::instance;
    }
};

... s'ils ont utilisé votre modèle Creator.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Hériter d'un constructeur d'une classe de modèle privée en C ++

Création d'une instance de modèle de classe ayant un constructeur privé

Accéder à une sous-classe interne avec un constructeur de classe privée à partir d'une autre classe

Accéder à un objet créé dans le constructeur d'une classe en c++

Destructeur d'un modèle appelé en fin de constructeur d'une classe de modèle

Pourquoi une classe modèle C++ peut-elle accéder à un membre privé de sa classe de base ?

Utilisation d'une classe avec un constructeur comme paramètre de type dans une instanciation de modèle en C ++

Comment accéder à un constructeur privé du contrôleur à la classe de modèle dans mvc 4

Accéder au constructeur privé à partir d'une fonction membre statique publique à l'aide de shared_ptr en C ++

Comment changer le contenu d'un constructeur de classe dans une classe javascript et y accéder plus tard ?

Accéder aux membres privés d'une classe en dehors de la classe

Est-il techniquement possible de dériver une classe qui n'a qu'un constructeur privé en Java ?

Comment laisser une méthode accéder aux membres privés d'autres instances de classe de modèle?

Comment accéder à un champ de membre de classe de modèle dans une classe de modèle spécialisée en C ++?

Comment écrire un constructeur pour une classe de modèle à l'aide d'arguments de référence universels en C ++

Initialiser un membre de classe statique const sans paramètres dans le constructeur d'une classe personnalisée en C ++

Créer une classe avec un constructeur privé en F #

C ++ Accéder à un membre privé dans une classe d'amis

Test unitaire d'une classe avec un constructeur privé

Sous-classer une classe avec un constructeur par défaut privé en Java

Accéder aux variables privées d'une classe C ++

Comment accéder à un "membre privé" d'une instance distincte de la même "classe"?

Hériter d'une classe C # qui n'a qu'un constructeur privé

C ++ - Comment instancier un objet avec le constructeur privé dans une autre classe

Comment autoriser un std::unique_ptr à accéder au destructeur privé d'une classe ou implémenter une classe d'usine C++ avec un destructeur privé ?

Utilisation de enable_if pour désactiver un constructeur de modèle d'une classe de modèle

Une classe dérivée peut-elle être rendue non copiable en déclarant le constructeur / opérateur de copie privé dans la classe de base?

Initialiser une variable statique privée de classe de modèle en C++

type d'itérateur pour le constructeur de classe de fractionnement de modèle en C ++

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive