允许通过指向方法的成员参数的指针来推断模板参数所指向的成员类型

Allow for template argument deduction of type of member pointed to by pointer to member argument of method

本文关键字:参数 成员 成员类 类型 指针 许通过 方法      更新时间:2023-10-16

>我做了以下方法作为一个小实验,以确定这是否可行:

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();

如注释中所述,模板参数推导不适用于默认参数。

在这里,您可以简单地为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);
}
};