2010-11-30 47 views
4
#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; 
} 

在上面的代碼中,我試圖從另一個類使用函數指針typedef。如圖所示,它不能編譯,但其他兩行中的任何一行都未被註釋,而不是Test<A>::Func f,行,它編譯得很好!這是我在C++中無法做到的事情嗎?需要什麼語法?模板成員函數typedefs不會編譯

使用G ++ 4.4.3,我得到

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" 
+2

Johannes給出了這個答案(http://stackoverflow.com/questions/610245/where-to-put-the-template-and-typename-on-dependent-names/613132#613132)一個相關的問題將解釋所有關於`typename`和從屬名稱的知識,然後再多一點。 – sbi 2010-11-30 18:41:51

回答

相關問題