Maison  >  Article  >  développement back-end  >  Pouvez-vous intégrer des fonctions membres définies dans des fichiers .cpp ?

Pouvez-vous intégrer des fonctions membres définies dans des fichiers .cpp ?

DDD
DDDoriginal
2024-10-27 22:25:02343parcourir

 Can You Inline Member Functions Defined in .cpp Files?

Placer la définition de fonction membre en ligne dans un fichier .cpp

Dans cet article, nous aborderons le dilemme de l'implémentation de fonctions membres en ligne dans des fichiers .cpp malgré la convention de placement dans les en-têtes.

Le problème vient de l'inclusion circulaire, comme le démontrent les extraits de code ci-dessous :

<code class="cpp">// File A.h
#include "B.h"

class A {
    B b;
};</code>
<code class="cpp">// File B.h
#include "A.h" // forward declaration

class B {
    inline A getA();
};</code>

En raison de la dépendance circulaire, l'implémentation de getA() doit être placé dans B.cpp :

<code class="cpp">// File B.cpp
#include "B.h"
#include "A.h"

inline A B::getA() {
    return A();
}</code>

Le compilateur en ligne getA ?

Non, sauf si l'utilisation de getA() se fait dans B.cpp lui-même.

Importance des mots-clés en ligne

Le mot-clé en ligne dans la définition en dehors du corps de la classe est le plus significatif.

Manières alternatives de définir le contenu en ligne Fonctions membres dans les fichiers .cpp

Malheureusement, il n'existe pas d'approche alternative pour placer la définition d'une fonction membre en ligne dans son fichier .cpp. La norme exige que le compilateur voie la définition de la fonction partout où elle est appelée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn