我已经将以下方法作为一个小实验来确定是否可能:
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();
答案 0 :(得分: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);
}
};