2017-07-18 1 views
1

Comment puis-je renvoyer la valeur d'une variable dans un modèle de fonction pouvant accepter tous les types?Renvoie la valeur d'une variable de type X à l'aide d'un modèle de fonction

Par exemple, supposons que je suit la fonction:

template<typename T> 
size_t func(T const&) { 
    return sizeof(T); 
} 

Il peut accepter tout type comme int, unsigned int, BSTR et long et retourner la taille de type.

Mais je tiens à obtenir la valeur de la variable de tout type comme:

template<typename T, valueof typename> 
X func(T const&) { 
    // << return valueof(T) OR return typeid(T).value OR WHATELSE??? >> 
} 

Par exemple, j'ai besoin ci-dessus pour revenir Hello World! quand je l'utilise comme func<BSTR>("Hello World!"). J'ai besoin ci-dessus pour retourner 123456 quand je l'utilise comme func<int>(123456).

Je sais déjà comment obtenir le nom du type de variable en utilisant typeid(T).name(), mais je ne sais pas comment obtenir la valeur d'une variable qui a un type T.

Merci d'avance.

+2

moi aussi je pensais que @ le soufflet de solution de Ron est ce que vous avez besoin. Si ce n'est pas, votre grossièrement sous-spécifié votre problème. – StoryTeller

+0

@StoryTeller sous-spécifié signifiait? – GTAVLover

+1

Vous n'avez pas expliqué ce que vous voulez bien du tout. "Je veux' X' pour 'foo (X)' "demande une solution évidente. – StoryTeller

Répondre

2

Il suffit de retourner la valeur du paramètre:

template <typename T> 
T func(const T& param) { 
    return param; 
} 
+0

Merci, cela a fonctionné! Que dois-je faire Si je veux convertir le paramètre ci-dessus en un seul type wstring? Je pense que c'est impossible parce que les conversions universelles ne peuvent pas être effectuées à partir de la même fonction – GTAVLover

+2

@GTAVLover - ['std :: to_wstring'] (http://fr.cppreference.com/w/cpp/string/basic_string/to_wstring)? – StoryTeller

+0

Oui ** tout type ** de retour de paramètre à un' wstring'. Parce que je veux que cette valeur soit affectée dans le futur à un type de données correct dans un 'VARIANT' – GTAVLover