问题描述
|
假设我有两个不相关的类
A
和B
。我也有一个使用ѭ3uses的类Bla
:
class Bla {
public:
void foo(boost::shared_ptr<const A>);
void foo(boost::shared_ptr<const B>);
}
注意const。那是该问题的原始版本所缺少的重要部分。这将编译,并且以下代码有效:
Bla bla;
boost::shared_ptr<A> a;
bla.foo(a);
但是,如果在上述示例中从使用ѭ3切换为使用std::shared_ptr
,则会出现编译错误,指出:
\"error: call of overloaded \'foo(std::shared_ptr<A>)\' is ambiguous
note: candidates are: void foo(std::shared_ptr<const A>)
void foo(std::shared_ptr<const B>)
您能帮我弄清楚为什么编译器在std :: shared_ptr情况下无法找出使用哪个函数,而在boost :: shared_ptr情况下却无法解决吗?我正在使用Ubuntu 11.04软件包存储库中的默认GCC和Boost版本,当前版本为GCC 4.5.2和Boost 1.42.0。
这是您可以尝试编译的完整代码:
#include <boost/shared_ptr.hpp>
using boost::shared_ptr;
// #include <memory>
// using std::shared_ptr;
class A {};
class B {};
class Bla {
public:
void foo(shared_ptr<const A>) {}
void foo(shared_ptr<const B>) {}
};
int main() {
Bla bla;
shared_ptr<A> a;
bla.foo(a);
return 0;
}
顺便说一句,这个问题促使我问这个问题,我是否应该完全使用std::shared_ptr
;-)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)