考虑:
struct foo
{
void foobar(){}
};
struct bar : protected foo
{
using foo::foobar;
};
int main()
{
bar b;
b.foobar(); // Fine
&bar::foobar; // Not fine
}
我想知道让 using 声明公开成员而不是指向它的指针的理由是什么。实际上,除了获取公开函数的地址之外,似乎所有使用更改访问级别的声明都适用于所有内容。
更新:一个更类似于我的真实用例的示例:
#include "boost/bind.hpp"
struct foo
{
void foobar() {}
};
struct bar : protected foo
{
using foo::foobar;
bar() { boost::bind( &bar::foobar, this )(); } // Crashes VS2008, GCC 4.1.1 fails to compile as it tries to go through foo*
};
int main()
{
bar b;
}
然而,Mike Seymours 的解释是正确的,并解释了 GCC 失败的原因。谢谢!