A função de membro modelada typedefs não será compilada
#include <iostream>
#include <string>
using namespace std;
void printstr( const string & s ) { cout << s << endl; }
template < typename A >
class Test
{
public:
typedef void (*Func)( const A & );
};
typedef void (*Func)( const string & );
template < typename A >
void bind(
Test< A >::Func f, //<---- does NOT compile
//Func f, //<---- compiles & works!
//void (*f)( const A & ), //<---- compiles & works!
const A & a) { f( a ); }
int main( )
{
bind( printstr, string("test") );
return 0;
}
No código acima, estou tentando usar um ponteiro de função typedef de outra classe. Como mostrado, ele não é compilado, mas com as outras duas linhas descomentadas em vez deTest< A >::Func f,
linha, compila bem! Isso é algo que não posso fazer em C ++? Qual sintaxe é necessária?
Usando o g ++ 4.4.3, recebo
test.cpp:20: error: variable or field "bind" declared void
test.cpp:20: error: expected ")" before "f"
test.cpp:23: error: expected primary-expression before "const"