eud*_*xos 8 python boost shared-ptr python-c-api c++11
我有一个大量使用的c ++代码shared_ptr和STL.一个常见的标题说
#include<boost/shared_ptr.hpp>
using boost::shared_ptr; // for shared_ptr
using namespace std; // for STL
Run Code Online (Sandbox Code Playgroud)
我现在想切换到c ++ 0x来使用语言功能,使用gcc 4.6 -std=c++0x.然而std::shared_ptr现在也存在,导致未指明shared_ptr(boost::shared_ptrvs std::shared_ptr)的模糊性.
切换到std::shared_ptr相反时,如下所示:
#include<memory>
using namespace std; // for STL; also imports std::shared_ptr
Run Code Online (Sandbox Code Playgroud)
然后我遇到了问题boost::python,它boost::shared_ptr只是有效地工作(至少没有进一步的摆弄):
/usr/include/boost/python/object/make_ptr_instance.hpp:30:52: error: no matching function for call to 'get_pointer(const std::shared_ptr<Cell>&)'
Run Code Online (Sandbox Code Playgroud)
我的问题是
boost::shared_ptr和std::shared_ptr(比不使用的C++ 0x现在其他),并且还boost::shared_ptr最终只是一个别名std::shared_ptr; 这将自动解决我的问题.谢谢!
您需要为共享指针类定义独立函数“get_pointer”,才能与 Boost Python 一起使用。(请注意,这使您能够编写自己的共享指针,并且仍然可以使用 Boost Python:这是一个有意识的设计工作,旨在防止不同的 Boost 库的紧密耦合)。
您可能会使用 boost tr1 兼容性标头来实现这一点,但我还没有尝试过。
http://boost.cowic.de/rc/pdf/tr1.pdf
当 Boost.TR1 配置为使用标准库的本机 TR1 实现时,它不会做太多事情:它只包含适当的标头。
当 Boost.TR1 使用特定组件的 Boost 实现时,它会包含适当的 Boost 标头,并使用 using 声明在命名空间 std::tr1 中导入必要的声明。请注意,只有那些属于标准一部分的声明才会被导入:为了捕获用户代码中的任何可移植性错误,实现故意非常严格,不包括命名空间 std::tr1 中的任何特定于 Boost 的扩展。如果您确实需要使用 Boost 特定的扩展,那么您应该直接包含 Boost 标头并使用命名空间 boost:: 中的声明。请注意,这种实现方式并不完全符合标准,特别是无法将 TR1 组件的用户定义模板特化添加到命名空间 std::tr1 中。还有一两个 Boost 库尚未完全符合标准,任何此类不符合项都记录在 TR1 按主题部分中。但希望在实践中非标准行为的发生应该极其罕见。
如果您使用符合标准的头文件包含(在 boost/tr1/tr1 中),那么这些头文件名称有时可能会与现有标准库头文件冲突(例如,shared_ptr 添加到现有标准库头文件而不是它自己的头文件中)。这些标头以两种方式之一转发到您现有的标准库标头:对于 gcc,它使用 #include_next,对于其他编译器,它使用宏 BOOST_TR1_STD_HEADER(header) (在 boost/tr1/detail/config.hpp 中定义)来评估到 #include <../include/header>。对于大多数编译器来说,这应该“直接开箱即用”,但这确实意味着这些头文件永远不应该放置在编译器搜索路径中已经存在的名为“include”的目录中。
| 归档时间: |
|
| 查看次数: |
3977 次 |
| 最近记录: |