Comment auto-documenter un type-alias qui est utilisé dans une autre bibliothèque ?
Dans l'exemple ci-dessous, la classe User
définit un alias User::type
qui n'est censé être mentionné que dans la classe Library
via T::type
.
Voici le schéma :-
Library.h
Library<T>
attendu seulement T
qui définit un certain alias (par ex. T::type
dans cet exemple).
#include <iostream>
class Base{}; //dummy for the sake of example
template<class T>class Library{
Base* t=nullptr;
public: typename T::type getValue(){return static_cast<typename T::type>(t);}
//some complex function, e.g. T::aType::doSomething()
};
Dans des cas concrets, Library<T>
attendue nombreux alias, par exemple T::aType
, T::bType
, T::callbackType
, etc.
User.h
Pour utiliser la bibliothèque ci-dessus, ::type
doit être défini, par exemple, comme suit :-
class Derived : public Base{}; //dummy for the sake of example
class User{
public: using type=Derived*;//<-- poorly documented
//... other alias e.g. aType=int*, bType=SomeClass*
//... other complex functions
};
Voici l'utilisation ( Démonstration complète ):-
int main(){
Library<User> lib;
lib.getValue();
std::cout<<"OK"<<std::endl;
}
Problème
Notez que User::type
manque vraiment d'auto-documentation.
Dans la vie réelle, la plupart des codeurs - y compris ceux qui l'ont conçu - oublient ce qu'est le User::type
est destiné à.
User::type
n'est pas référencée en interne dans User.h
Il s'agit donc d'une cible facile à supprimer au hasard par certains codeurs.
Je sens que nos codes bien-aimés sont pourris de l'intérieur, et je réfléchis aux moyens de les sauver.
Question
Comment auto-documenter l'alias de type pour indiquer comment/où il se trouve ? appelé ?
Mes mauvaises solutions
1. commentaire
class User{
/** It is used for Library.h */
public: using type=Derived*;
Il se salit assez vite, et je préfère encore utiliser la sémantique C++ plutôt que le commentaire aléatoire.
2. rendre le nom du type plus descriptif
class User{
/** It is used for Library.h */
public: using LIBRARY_type=Derived*;
C'est assez désordonné.
Remarque : Cette question est similaire à Comment auto-documenter une fonction callback appelée par une classe de la bibliothèque template ? mais celui-ci est consacré à type-def
alors que celle-ci porte sur callback
.