Ho una classe all'interno di un namespace in un file di intestazione. La classe richiede un tipo di modello e desidero solo che alcuni tipi vengano utilizzati. Di seguito è riportato un esempio.Classe privata nello spazio dei nomi
a.hpp File
// a.hpp
namespace a_ns {
template<class T>
class a {
// stuff
};
typedef a<double> a_double;
} // end of namespace
// stuff
b.hpp File
// b.hpp
#include <a.hpp>
namespace b_ns {
typedef a_ns::a_double b;
}
main.cpp File
// main.cpp
#include "b.hpp"
int main() {
b_ns::b my_b; // <<<--- I LIKE this!
a_ns::a<float> my_a_which_is_not_allowed; // <<<--- I DO NOT LIKE THIS THOUGH! D:
}
Quindi, come potete vedere dalla piuttosto desiderava uscire esempio, la L'obiettivo finale è NON PERMETTERE all'utente finale di dichiarare uno class a
con float
come il d essere in grado di utilizzare solo le classi predefinite con tipi specifici, come dichiarato da typedef a<double> a_double;
.
Ho pensato che questo esempio consentirebbe questo, tuttavia ho sbagliato, come posso creare un a<float>
come sopra, perché includo b.hpp
, che a sua volta include a.hpp
! Quindi vedi il problema! (si spera?)
Probabilmente esiste una soluzione semplice, se possibile.
In realtà mi piace - temo che non ci sia modo di sconfiggere i problemi dei programmatori. –
@ DieterLücking, Una volta superato il fatto che devono scavare deliberatamente nel buco, inizi a preoccuparti molto meno di prevenirlo. Se vogliono lasciarsi andare, lasciali. Se c'è qualcosa che può davvero aiutarli, almeno ora non hanno bisogno di un trucco per raggiungerlo. – chris
o come dice Herb Sutter: difendi contro Murphy, non Machiavelli – TemplateRex