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

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

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

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