允许通过指向方法的成员参数的指针来推断模板参数所指向的成员类型
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);
}
};
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用指向成员的指针将成员函数作为参数传递
- 如何将lambda作为模板类的成员函数参数
- 将成员函数指针作为参数传递给模板方法
- c++构造函数成员初始化:传递参数
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 模板化检查是否存在带有参数列表的类成员函数?
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 为什么我需要在成员发起器列表中重复基类的模板参数?
- C++向量默认为成员参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 可变参数模板参数扩展 类型为 std::function 的类成员
- 绑定到可变参数成员函数
- C/C++ 包含点的宏参数(成员访问运算符)
- 将const char * const参数成员分配给新值
- 基于模板参数成员函数参数的模板专用化
- 如何访问可变参数成员
- 可变类参数成员变量的异构存储
- 非模板类中的可变参数成员