相关疑难解决方法(0)

我应该从使用boost :: shared_ptr切换到std :: shared_ptr吗?

我想在GCC中启用对C++ 0x的支持-std=c++0x.我并不一定需要GCC 4.5中的任何当前支持的C++ 11功能(很快就会有4.6),但我想开始习惯它们.例如,在我使用迭代器的一些地方,auto类型会很有用.

但同样,我不需要任何当前支持的功能.这里的目标是鼓励我将新标准的特征融入我的编程"词汇"中.

根据您对C++ 11支持的了解,在GCC中启用它是一个好主意,然后通过例如从使用切换boost::shared_ptrstd::shared_ptr专用来实现它,因为两者不混合?

PS:我知道这个比较不同口味的好问题,shared_ptr但是我要求在标准最终确定之前提出更高级别的建议.另一种说法是,当像GCC这样的编译器说它支持"实验性功能"时,这是否意味着我可能会在编译过程中遇到奇怪的错误,这些错误将成为主要的时间汇,并且是StackOverflow上一个神秘问题的来源?

编辑:我决定退回,std::shared_ptr因为我只是不相信它在GCC 4.5中的支持,如本问题中的示例所示.

c++ boost stl shared-ptr c++11

66
推荐指数
4
解决办法
3万
查看次数

C++ 0x错误:使用std :: shared_ptr将函数重载到const参数是不明确的

假设我有两个不相关的AB.我也有一个Bla使用boost::shared_ptr这样的类:

class Bla {
public:
    void foo(boost::shared_ptr<const A>);
    void foo(boost::shared_ptr<const B>);
}
Run Code Online (Sandbox Code Playgroud)

请注意const.这是这个问题的原始版本所缺乏的重要部分.这个编译,以下代码工作:

Bla bla;
boost::shared_ptr<A> a;
bla.foo(a);
Run Code Online (Sandbox Code Playgroud)

但是,如果我在上面的例子中从使用切换boost::shared_ptr到使用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>)
Run Code Online (Sandbox Code Playgroud)

你能帮我弄清楚为什么编译器无法弄清楚在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: …
Run Code Online (Sandbox Code Playgroud)

c++ boost stl overloading shared-ptr

6
推荐指数
2
解决办法
3309
查看次数

标签 统计

boost ×2

c++ ×2

shared-ptr ×2

stl ×2

c++11 ×1

overloading ×1