可能的重复:
如何获取重载成员函数的地址? https://stackoverflow.com/questions/705854/how-to-get-the-address-of-an-overloaded-member-function
我有一个为类继承层次结构中的一组类型重载的函数,例如股票由FutureShare 和OptionShare 衍生而来。
virtual unsigned rank() const
{ return getValue(*this, rank_, &ShareUtils::getRank); }
template<typename TShare , typename TMember, typename TGetMemberFunc >
TValue& getValue(const TShare& share, boost::optional<TMember>& member, TGetMemberFunc func)
{
if(!member)
{
member.reset(func(share));
}
return *member;
}
boost::optional<unsigned> rank_;
//-------
static unsigned ShareUtils::getRank(const Share& share) { //... }
static unsigned ShareUtils::getRank(const OptionShare& option) { //... }
static unsigned ShareUtils::getRank(const FutureShare& future) { //... }
编译时我收到以下错误:
Share.h: In member function `virtual unsigned int Share::rank() const':
Share.h:25: error: no matching function for call to `Share::getValue(const Share&, boost::optional<unsigned int>&, <unresolved overloaded function type>) const'
如何正确调用重载函数?我认为 TShare 会解决调用 func 时的过载问题?
EDIT我忘记将重载函数标记为静态。
这无法编译,因为ShareUtils::getRank
不是指单个功能而是指一个family函数(该名称有多个签名)。
您想强制转换为函数指针以抑制歧义,这意味着您必须从rank
函数其中getRank
应该被调用(这在你的情况下应该不是问题):
virtual unsigned rank() const
{ return getValue(*this, rank_, (unsigned (ShareUtils::*)(const Share&)) &ShareUtils::getRank); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)