【发布时间】:2013-08-03 09:45:25
【问题描述】:
我很惊讶在 VS2005 中编译的以下代码没有任何抱怨,因为在实现中对 Bar() 的调用让我停下来想知道如何消除歧义。
class Foo
{
public:
void Bar(int param = 0);
private:
void Bar();
};
地点:
void Foo::Bar(int param)
{
// do something
return Bar();
}
谁能赐教?
编辑:
天哪!
立即意识到我的理解上的差距......
我的实际标题是
class Foo : public IFoo
{
public:
void Bar(int param);
private:
void Bar();
};
class IFoo
{
public:
virtual void Bar(int param = 0) = 0;
};
这与我最初发布的内容不同。我以为是。
【问题讨论】:
-
并且可以手动消除歧义:
(this->*static_cast<void(Foo::*)()>(&Foo::Bar))(); -
@jrok 关于您的第二条评论 - 这将如何消除歧义?您仍在使用模棱两可的
Foo::Bar... -
@cluracan
static_cast到相应的成员函数指针就可以了。 -
@jrok:是的,我的错误......太糟糕了,我不能对自己投反对票 =/
标签: c++ overloading