Template-Funktion in Namespace als Template Parameter für Klasse
-
Hallo zusammen,
ich habe folgendes Problem. Ich übergebe eine Template-Funktion an eine Klasse
als Template-Parameter. Das funktioniert auch, allerdings nur solange
die Funktion nicht in einem Namespace ist.namespace ns{ template<typename T> T funcNS(const T& i){ return i; } } template<typename T> T func(const T& i){ return i; } template<class T, T (*T2)(const T&)> class Foo{ public: Foo(const T& t) : t(t){ } void bar(){ this->t = T2(t); } private: T t; }; int main(int argc, char**) { Foo<int, &func<int> > foo(0); foo.bar(); Foo<int, &ns:funcNS<int> > foo2(0); // <-- Hier meckert der Compiler foo2.bar(); }
test.cpp: In function 'int main(int, char**)': test.cpp:31:43: error: template argument 2 is invalid test.cpp:31:49: error: invalid type in declaration before '(' token test.cpp:32:14: error: request for member 'bar' in 'foo2', which is of non-class type 'int'
Es funktioniert mit
using namespace ns;
Allerdings hätte ich gerne eine nicht-using-Lösung.
Wahrscheinlich ist die Lösung einfach. Ich komme nur gerade nicht drauf...Gruß,
XSpille
-
::
-
Foo<int, &ns::func<int> > foo(0);
-
Danke euch beiden!
Da war ich heute morgen wohl noch nicht richtig wach und habe mein
Problem falsch runterreduziert.Man sollte nicht versuchen den Zeiger auf die Funktion erst in eine const-Variable
zu packen