Bonjour,
je souhaite créer des identifiants textes associés à un type. J'ai pensé
utiliser 'typeid', le problème c'est que pour cela il me faut une
instance de la classe, et je ne l'ai pas forcément ou ne souhaite pas la
créer.
En gros avoir une fonction statique du type
Connector< UnTypeQuelconque >::getId( "toto" )
qui retourne quelquechose du genre
"totoUnTypeQuelconque"
Il y a ce code qui fonctionne mais je suis obligé de créer un objet
temporaire. Ca peut avoir un coût, voire être impossible si aucun
constructeur par défaut n'est fourni.
template< typename Type >
class Connector
{
static std::string getId( const std::string& id )
{
// Fonctionne mais crée une variable temporaire
Type t ;
return PsName( id + typeid(t).name() ) ;
}
} ;
Et sans instance ça ne peut pas fonctionner !
template< typename Type >
class Connector
{
static std::string getId( const std::string& id )
{
// Ne fonctionne pas :-(
Type *p = 0 ;
return PsName( id + typeid(*p).name() ) ;
}
} ;
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Benoit Chanclou
Benoit Chanclou wrote:
Bonjour, je souhaite créer des identifiants textes associés à un type. J'ai pensé utiliser 'typeid', le problème c'est que pour cela il me faut une instance de la classe, et je ne l'ai pas forcément ou ne souhaite pas la créer.
En gros avoir une fonction statique du type Connector< UnTypeQuelconque >::getId( "toto" ) qui retourne quelquechose du genre "totoUnTypeQuelconque"
Il y a ce code qui fonctionne mais je suis obligé de créer un objet temporaire. Ca peut avoir un coût, voire être impossible si aucun constructeur par défaut n'est fourni.
template< typename Type > class Connector { static std::string getId( const std::string& id ) { // Fonctionne mais crée une variable temporaire Type t ; return PsName( id + typeid(t).name() ) ; } } ;
Et sans instance ça ne peut pas fonctionner !
template< typename Type > class Connector { static std::string getId( const std::string& id ) { // Ne fonctionne pas :-( Type *p = 0 ; return PsName( id + typeid(*p).name() ) ; } } ;
désolé d'avoir polluer avant de réfléchir, j'ai trouvé !! Avec le code suivant on a le type du pointeur sur le type au lieu du type lui même, mais cela me convient parfaitement
template< typename Type > class Connector { static std::string getId( const std::string& id ) { // fonctionne :-) return PsName( id + typeid((Type*)p).name() ) ; } } ;
Benoit Chanclou wrote:
Bonjour,
je souhaite créer des identifiants textes associés à un type. J'ai pensé
utiliser 'typeid', le problème c'est que pour cela il me faut une
instance de la classe, et je ne l'ai pas forcément ou ne souhaite pas la
créer.
En gros avoir une fonction statique du type
Connector< UnTypeQuelconque >::getId( "toto" )
qui retourne quelquechose du genre
"totoUnTypeQuelconque"
Il y a ce code qui fonctionne mais je suis obligé de créer un objet
temporaire. Ca peut avoir un coût, voire être impossible si aucun
constructeur par défaut n'est fourni.
template< typename Type >
class Connector
{
static std::string getId( const std::string& id )
{
// Fonctionne mais crée une variable temporaire
Type t ;
return PsName( id + typeid(t).name() ) ;
}
} ;
Et sans instance ça ne peut pas fonctionner !
template< typename Type >
class Connector
{
static std::string getId( const std::string& id )
{
// Ne fonctionne pas :-(
Type *p = 0 ;
return PsName( id + typeid(*p).name() ) ;
}
} ;
désolé d'avoir polluer avant de réfléchir, j'ai trouvé !!
Avec le code suivant on a le type du pointeur sur le type au lieu du
type lui même, mais cela me convient parfaitement
template< typename Type >
class Connector
{
static std::string getId( const std::string& id )
{
// fonctionne :-)
return PsName( id + typeid((Type*)p).name() ) ;
}
} ;
Bonjour, je souhaite créer des identifiants textes associés à un type. J'ai pensé utiliser 'typeid', le problème c'est que pour cela il me faut une instance de la classe, et je ne l'ai pas forcément ou ne souhaite pas la créer.
En gros avoir une fonction statique du type Connector< UnTypeQuelconque >::getId( "toto" ) qui retourne quelquechose du genre "totoUnTypeQuelconque"
Il y a ce code qui fonctionne mais je suis obligé de créer un objet temporaire. Ca peut avoir un coût, voire être impossible si aucun constructeur par défaut n'est fourni.
template< typename Type > class Connector { static std::string getId( const std::string& id ) { // Fonctionne mais crée une variable temporaire Type t ; return PsName( id + typeid(t).name() ) ; } } ;
Et sans instance ça ne peut pas fonctionner !
template< typename Type > class Connector { static std::string getId( const std::string& id ) { // Ne fonctionne pas :-( Type *p = 0 ; return PsName( id + typeid(*p).name() ) ; } } ;
désolé d'avoir polluer avant de réfléchir, j'ai trouvé !! Avec le code suivant on a le type du pointeur sur le type au lieu du type lui même, mais cela me convient parfaitement
template< typename Type > class Connector { static std::string getId( const std::string& id ) { // fonctionne :-) return PsName( id + typeid((Type*)p).name() ) ; } } ;