problem mit (expliziter) spezialisierung von funktionstemplate
-
struct X { typedef int type; }; template<typename T> void f(const typename T::type* foo); template<> void f<X>(const X::type* foo) {}vc++ 7.1 behauptet:
error C2912: explicit specialization; 'void f<X>(const X::type *)' is not a specialization of a function template
g++ schluckt es ohne probleme. Ist das nun mein fehler oder spinnt der compiler?
Schätze im zweifel schreib ich eben einen Funktor - zumindest akzeptiert es dann auch vc++.
-
überladen sollte gehen:
void f(const X::type* foo) {};
-
das geht, nützt mir hier aber nichts. X ist eine art traits klasse, und type kann für verschiedene T identisch sein, trotzdem handelt es sich um verschiedene funktionen.
-
Mir ist grad noch was eingefallen:
template<class T> struct help { static void f(const typename T::type* foo) { //... }; }; template<> struct help<X> { static void f<(const X::type* foo) {}; }; template<class T> void f(const typename T::type* foo) { return help<T>::f(foo); };
-
auch wenn das thema angestaubt ist, aber ich hat das gleiche problem und habs grad eben kapiert warum das hier nicht gehen kann.
als funkionsparameter wird ein typ verwendet der in X definiert wird. wenn mans nun aber mit X spezialisiert sieht der compiler nur: einen typ X mit dem die funktion ausgeprägt wurde und einen paramter X::type* was effektiv ein int ist.