草庐IT

c++ - 在 boost::python 中公开 boost::scoped_ptr

我收到一个编译错误,说scoped_ptr的复制构造函数是私有(private)的,代码片段如下:classa{};structs{boost::scoped_ptrp;};BOOST_PYTHON_MODULE(module){class_("s");}虽然这个例子适用于shared_ptr。如果有人知道答案,那就太好了。谢谢 最佳答案 boost::scoped_ptr的语义禁止复制,而shared_ptr旨在被复制。您得到的错误是编译器告诉您某些代码(宏扩展?)正在尝试复制scoped_ptr但库不允许进行复制。

c++ - c++0x 元组是否使用新的可变参数模板或 Boost 的宏元组实现?

我读到它基于Boost的版本,但我不太确定具体到实现时这意味着什么。我知道Boost有自己的可变参数模板,但我认为c++0x会为新元组使用它自己的可变参数模板。 最佳答案 C++0x标准草案中的tuple使用C++0x可变参数模板。它被声明为(§20.4.1):templateclasstuple;但是请注意,TR1语言扩展还包括tuple,它不使用可变参数模板,因为在编写TR1时没有这样的东西。在TR1中,tuple声明为(§6.1):templateclasstuple;其中M是一些实现定义的值,应该至少为10。TR1并不是C+

使用 Qt 进行 C++0x 编程

有人用C++0x用Qt做过一些编程吗?效果如何?是否可以使用C++0x的所有优良特性?您使用的是什么编译器和版本?我目前正在使用gcc4.6并尝试所有c++0x功能,但我还没有对Qt做任何事情。 最佳答案 Qt几乎取代了所有标准库的功能。至于核心特性,肯定不会很快出现,因为Qt支持广泛的编译器。 关于使用Qt进行C++0x编程,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/417

c++ - 谁能解释一下当前C++0x标准草案的这一段?

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭11年前。谁能解释ISON3242§3.2第4点中的这个陈述与ISO标准2003相比,n3242的新增部分:4Exactlyonedefinitionofaclassisrequiredinatranslationunitiftheclassisusedinawaythatrequirestheclasstypetobecomplete.AclasstypeTmustbecompleteif:anon-s

c++ - auto_ptr 和 dynamic_pointer_cast

如果我想将dynamic_cast与shared_ptr一起使用,我可以使用dynamic_pointer_cast。如果我想转换auto_ptr,我该用什么?我假设如下所示。structB:A{};...auto_ptrbase(...);auto_ptrderive=dynamic_pointer_cast(base);我正在为shared_ptr使用boost 最佳答案 auto_ptrbase(...);if(B*query=dynamic_cast(base.get())){//takeownershipbase.rele

c++ - 按值返回由互斥量保护的 shared_ptr 是否安全?

这是一个代码示例:classA{boost::mutexa_mutex;boost::shared_ptra;boost::shared_ptrclone_a(void){boost::lock_guardlock(a_mutex);returna;}};建议boost::shared_ptr对A::a的复制构造函数调用将在boost::lock_guard析构函数调用之前尽管有编译器优化。那么,调用A::clone_a()安全吗? 最佳答案 如果您所说的“安全”是指您不会在a上发生数据竞争,那么是的。正如你所说。但是,正如您可能知

c++ - MacOS 的 "-std=gnu++0x"选项

我正在尝试编译一个使用的CMake项目set(CMAKE_CXX_FLAGS${CMAKE_CXX_FLAGS}"-Wall-std=gnu++0x")在MacOSXLion下的CMakeLists.txt文件中。我已经安装了XCode4.2.1。但是编译器失败了:cdsomething/src/lib&&/usr/bin/c++-Dlib_ginacra_EXPORTS-Wall-std=gnu++0x-fPIC-oCMakeFiles/lib_ginacra.dir/utilities.cpp.o-csomething/src/lib/utilities.cppcc1plus:er

c++ - 我如何在 void* 和 boost shared_ptr 之间进行转换

我有这些行:typedefboost::shared_ptrA_SPtr;void*f(void*var){...我希望能够做这样的事情:A_SPtrinstance=(void*)(var);我该怎么做?另外,我怎样才能将意义从shared_ptr转换为void*? 最佳答案 只需将指针转换为指向和来自void*的共享指针。shared_ptr到void*:f(reinterpret_cast;(&A_SPtr));void*回到shared_ptr:A_SPtrinstance=*reinterpret_cast(boost::

c++ - 如何使用移动构造函数正确处理 shared_ptr 的映射?

假设我有一个容器std::map>我想用外部函数填充它并避免处理它的内容。所以我有typedefContainerstd::map>Container&&f(){Containerbar;autofoo=std::shared_ptr(newMyClass());bar.insert(std::make_pair(0,foo));std::coutprint_smthprint_smth如果我使用传统的复制构造函数,一切都会按预期工作。 最佳答案 这远太复杂了。为什么不直接说:intmain(){Containerbaz{{0,st

c++ - boost std unique_ptr 的 STL 集合的序列化

我希望能够序列化std::unique_ptr的STL容器。可以吗?顺便说一句,单个std::unique_ptr一切正常。下面是我正在处理的代码,gcc给出了以下错误:useofdeletedfunction‘std::unique_ptr::unique_ptr(conststd::unique_ptr&)[with_Tp=MyDegrees;_Dp=std::default_delete;std::unique_ptr=std::unique_ptr]’如何使代码正常工作?#include#include#include#include#include#include#inclu