2011-11-30 24 views
3

我試圖編譯下面的代碼:C++編譯器將模板語法如「<」操作者

struct A { 
    template<int N> static void a() {} 
}; 

template<> void A::a<5>() {} 

template<class T> 
struct B { 
    static void b() { 
     T::a<5>(); 
    } 
}; 

void test() { 
    A::a<5>(); 
    B<A>::b(); 
} 

和編譯器在T::a<5>解釋<作爲操作<,導致錯誤:

invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’ 

有沒有什麼辦法顯式實例化T::a<5>沒有編譯錯誤? 謝謝。

gcc版本4.5.1 20100924(紅帽4.5.1-4)(GCC)

+0

[template disambiguator]的可能重複(http://stackoverflow.com/questions/4077110/template-disambiguator) – iammilind

回答

6

是,更改該行:

T::template a<5>(); 

編譯器不知道是否T::a是一個函數(因爲其性質爲template)。通過提到template,您可以明確地通知編譯器。這個問題被問了很多次,這裏是one of them

+1

+1。正確.... – Nawaz

+0

明白了,謝謝! – user1072688

+0

@ user1072688,如果這篇文章回答你的問題,那麼你可以通過在它下面打勾右邊的刻度線來接受它。 – iammilind