2017-05-25 20 views
7

Templated şablonu sınıfındaki fonksiyonun

template <typename T> 
class Foo { 
public: 
    template <int x> 
    void bar() {} 
}; 

aşağıdaki derlemesinin ile:

void fooBar() 
{ 
    Foo<int> f; 
    f.bar<1>(); 
} 

ancak aşağıdaki does not ile ("hata: beklenen önce birincil ifade ')' belirteç" gcc 5.4 .0 ile -std = C++ 14). İkinci sürümü açıkça çağırmaya çalışırsam, örn.

fooBar<int>(); 

sonra ilave olarak ikinci versiyonu geçersiz bir sebep yaklaşık

"invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator<'". 

var mı şikayet GCC? Gcc neden bir şablon parametre listesinin başlangıcından ziyade '<' operatör olarak davranıyor? şablonu fonksiyonu ile

+0

olduğunu bunu anlatarak derleyici yardımcı olabilir; '? Nerede var? – alhadhrami

+0

@alhadhrami Üzgünüm - fooBar okumuş olmalı. Düzenlemede düzeltildi. – Matt

cevap

15

, derleyici Foo<T> olacak tam olarak ne (Foo uzmanlıklarıdır olabilir) bilmez, bu yüzden f.bar üye değişkeni olduğunu varsayalım ve

f.bar < 1 
olarak kod ayrıştırması gerekir

ve devam edemiyor.

Sen bar fonksiyonunu foo <>() ne bir şablon

f.template bar<1>(); 
+0

Bu çalışır - ve bu sözdizimini daha önce hiç görmedim. Bunu denemeyi asla düşünmezdim. Teşekkür ederim! – Matt