2017-07-18 3 views
1

Wie kann ich den Wert einer Variablen in einer Funktionsvorlage zurückgeben, die jeden Typ annehmen kann?Gibt den Wert einer Variablen vom Typ X mit einer Funktionsvorlage zurück

Zum Beispiel gehe ich davon folgende Funktion haben:

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

Es jede Art annehmen kann wie int, unsigned int, BSTR und long und Größe des Typs zurück.

Aber Ich mag den Wert der Variablen eines beliebigen Typs erhalten wie:

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

Zum Beispiel habe ich oben benötigen Hello World! zurückzukehren, wenn ich es wie func<BSTR>("Hello World!") verwenden. Ich benötige oben, um 123456 zurückzugeben, wenn ich es wie func<int>(123456) verwende.

Ich weiß bereits, wie man den Namen des variablen Typs unter Verwendung typeid(T).name() erhält, aber nicht weiß, wie man Wert einer Variablen erhält, die einen T Typ hat.

Vielen Dank im Voraus.

+2

Ich dachte auch, dass @ Rons Lösung unten ist das, was Sie brauchen. Wenn nicht, haben Sie Ihr Problem grob unterbewertet. – StoryTeller

+0

@StoryTeller unterspezifiziert gemeint? – GTAVLover

+1

Bedeutet, Sie haben überhaupt nicht erklärt, was Sie wollen. "Ich will' X' für 'foo (X)' "bittet um eine offensichtliche Lösung. – StoryTeller

Antwort

2

einfach den Wert des Parameters zurück:

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

Danke, es hat funktioniert! Was soll ich tun? Wenn ich obige Parameter in einen einzigen Typ 'wstring' konvertieren möchte? Ich denke, es ist unmöglich, weil universelle Konvertierungen nicht von der gleichen Funktion durchgeführt werden können. Habe ich Recht? – GTAVLover

+2

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

+0

Ja ** jeder Typ ** von Rückgabeparameter zu einem' wstring'. Weil ich möchte, dass dieser Wert in Zukunft in einem 'VARIANT' dem richtigen Datentyp zugewiesen wird. – GTAVLover

Verwandte Themen