Funktion als Templatevariable
-
Hallo, kann ich eine Funktion als Template-Variable mitgeben? Meine Idee wäre so, aber das scheint mi kein valides C++ zu sein:
#include <iostream> #include <string> class Test { private: std::string test; public: Test( const std::string& test ) : test( test ) { } std::string getString() { return test; } }; template<typename A> std::string queryString( const Test& x ) { return A( x ); } int main( int argc, char *argv[]) { Test a( "hallo" ), b( "welt" ); std::cout << queryString<Test::getString>( a ) << " " << queryString<Test::getString>( b ) << std::endl; return 0; }
-
AH, ich glaub ich habs...
... typedef std::string (Test::*TestFunction)(); template<TestFunction A> std::string queryString( Test& x ) { return (x.*A)(); } int main( int argc, char *argv[]) { Test a( "hallo" ), b( "welt" ); std::cout << queryString<&Test::getString>( a ) << " " << queryString<&Test::getString>( b ) << std::endl; return 0; }Kann mir jemand sagen ob das so korrekt ist, oder ob das nur zufällig funktioniert?
-
oliver-abc schrieb:
AH, ich glaub ich habs...
... typedef std::string (Test::*TestFunction)(); template<TestFunction A> std::string queryString( Test& x ) { return (x.*A)(); } int main( int argc, char *argv[]) { Test a( "hallo" ), b( "welt" ); std::cout << queryString<&Test::getString>( a ) << " " << queryString<&Test::getString>( b ) << std::endl; return 0; }Kann mir jemand sagen ob das so korrekt ist, oder ob das nur zufällig funktioniert?
Es sieht auf den ersten Blick korrekt aus