2010-10-22 15 views
6

çağırmak için ben şablon yöntemi olarak verilen arama için uygun sözdizimi nedir merak ediyorumsözdizimi şablonu yöntem

print_ch printer('c'); 
printer.operator()<int>(); 

Ve o iş gibi görünüyor (GCC 4.5), ama başka bir şablonu yöntem içinde kullandığınızda, örneğin:

struct printer { 

    typedef int print_type; 

    template<typename T_functor> 
    static void print(T_functor& fnct) { 
     fnct.operator()<print_type>(); 
    } 

}; 

Derlemebaşarısız olur. Doğru olana dair bir fikrin var mı? Şimdiden teşekkürler. Eğer template anahtar kelime ile bu belirtmezseniz

fnct.template operator()<print_type>(); 

derleyici operator() sadece olduğunu kabul edecektir:

+4

O kadar daha temiz sadece düzenli bir işlev oluşturun. Operatörler tutumlu ve uygun olduğunda kullanılmalıdır. – JoshD

+0

@JoshD Teşekkürler, haklısınız, bu yeniden gözden geçirmem gerekecek Bu – erjot

+0

Gerçekten de, 'operator() 'aşırı yüklenmesi burada anlam ifade etmiyor çünkü normal bir işlev olarak aynı sözdizimi ile çağrılmıyor çünkü amacı tamamen yendi. – UncleBens

cevap

8

Sen şablon fnct ait operator() kendisini bir şablon olduğunu açıkça derleyici anlatmak zorunda normal yöntem, bir şablon değil.

+0

tam olarak, şimdi çok açık görünüyor - teşekkürler! – erjot

2

T_functor kendisini bir şablon, derleyici (veya ayrıştırıcı) Eğer explicetly kullandığınız bir şablon Methode aradığınız söylemek zorunda, 's üyeleri hakkında hiçbir şey bilmek varsayar olduğundan:

 fnct.template operator()<print_type>();