2017-07-22 125 views
1

我已經做出瞭如下方法作爲小實驗員的說法,以找出是否這將是可能的:允許類型成員的模板參數推導指針指向到方法

template<typename dataT> 
class DemographicNode 
{ 
    //... 
    template<typename varT> 
    varT count(const varT dataT::* variable = &dataT::citizens) const { 
     //... 
    } 
    //... 
} 

這種工作方式除了這樣的事實,即使對此方法的調用將提供所需的所有編譯時可用信息,這也不允許模板參數扣除varT

在這種情況下,有什麼辦法可以啓用模板參數推導嗎?

我正在使用VC++ 17。

編輯: 我要它調用方式如下:

gameState.getCountries()[0]->getDemoGraphics().count<double>(); 

,我想是這樣稱呼它:

gameState.getCountries()[0]->getDemoGraphics().count(); 
+2

你怎麼稱呼它? – songyuanyao

+0

你可以顯示呼叫部分?我無法重現該問題。 – Holt

+3

模板參數推導不適用於默認參數。 – songyuanyao

回答

2

正如評論所說,模板參數推導不適用於默認參數。

在這裏,你可以簡單地設置爲varT默認模板參數:

template<typename varT = decltype(dataT::citizens)> 
varT count(const varT dataT::* variable = &dataT::citizens) const { 

}; 

也可以添加不帶參數的count()過載:

template<typename dataT> 
class DemographicNode { 
public: 
    // no more default argument here 
    template<typename varT> 
    varT count(const varT dataT::* variable) const { 
    }; 

    // overload without parameters 
    auto count() const { 
     return count(&dataT::citizens); 
    } 
}; 
相關問題