class template parameter list verwenden um overload member functions zu generieren
-
Frohes neues Jahr C++ .net Forum!
Wie kann man aus einer class template parameter list Member Funktionen generieren?
Ich erkläre die Frage vielleicht am besten mit pseudo code.template <typename.. args> struct Magic { // hier template Magie anwenden }; // das man sich using MagicIntStr = Magic<int, std::string> ; // so circa so vorstellen kann struct MagicIntStr { void foo(int) ; void foo(std::string) ; };
ist so etwas überhaupt möglich?
-
Hallo!
Zum Beispiel so:
template <typename T> struct base { void foo(T); }; template <typename ...Args> struct Magic : public base<Args>... { };
-
Jodocus schrieb:
Hallo!
Zum Beispiel so:
template <typename T> struct base { void foo(T); }; template <typename ...Args> struct Magic : public base<Args>... { };
WOW, danke!
das muss ich gleich probieren
-
funktioniert so leider nicht
#include <string> #include <iostream> template<typename T> struct Base { void foo(const T&) { std::cout << __PRETTY_FUNCTION__ << std::endl ; } }; template <typename ...Args> struct Magic : public Base<Args>... { }; int main (void) { Magic<int, std::string> magic ; int i = 1; magic.foo(i) ; std::string s="s" ; magic.foo(s) ; return 0 ; }
prog.cpp: In function 'int main()': prog.cpp:22:9: error: request for member 'foo' is ambiguous magic.foo(i) ; ^ prog.cpp:8:8: note: candidates are: void Base<T>::foo(const T&) [with T = std::basic_string<char>] void foo(const T&) { ^ prog.cpp:8:8: note: void Base<T>::foo(const T&) [with T = int] prog.cpp:24:9: error: request for member 'foo' is ambiguous magic.foo(s) ; ^ prog.cpp:8:8: note: candidates are: void Base<T>::foo(const T&) [with T = std::basic_string<char>] void foo(const T&) { ^ prog.cpp:8:8: note: void Base<T>::foo(const T&) [with T = int]
-
so gehts!
(lösung jedoch nicht von mir, so clever bin ich nicht, mir wurde geholfen)