3

所以我想将智能指针从 boost 中分离出来,以便在我的项目中使用,并指导我使用bcp实用程序。

今天我把它编译并做了bcp smart_ptr to_copy_to_my_project/

结果:to_copy_to_my_project/目录中有 6MB 的代码。

你在开玩笑吧?我不想将 6MB 的头文件添加到我的 100KB 项目中,只是为了使用智能指针。

例如,它复制以下 win32 内容(我在 Linux 上):

Copying file: boost/thread/win32/basic_timed_mutex.hpp
Copying file: boost/thread/win32/condition_variable.hpp
Copying file: boost/thread/win32/interlocked_read.hpp

当我在 Linux 上时,为什么它会用 smart_ptr 复制 win32 的东西?

还:

Copying file: boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp
...
Copying file: boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp
...
Copying file: boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp

和:

Copying file: boost/date_time/adjust_functors.hpp

为什么 smart_ptr 依赖于 date_time?

还有它复制的所有这些测试呢:

Copying file: libs/smart_ptr/test/allocate_shared_esft_test.cpp
...

我什么都不需要!我只需要 smart_ptr!

我做错什么了吗?为什么它只为智能指针复制 6MB 的代码,我希望它是 10KB 或 20KB ......

谢谢,博达赛多。

4

5 回答 5

1

如果你想要的只是smart_ptr并且你对#define'ing不感兴趣BOOST_SP_USE_QUICK_ALLOCATOR(默认情况下没有定义),你只需要:

boost/assert.hpp
boost/checked_delete.hpp
boost/config.hpp
boost/config/compiler/*
boost/config/no_tr1/functional.hpp
boost/config/no_tr1/memory.hpp
boost/config/no_tr1/utility.hpp
boost/config/platform/*
boost/config/posix_features.hpp
boost/config/select_compiler_config.hpp
boost/config/select_platform_config.hpp
boost/config/select_stdlib_config.hpp
boost/config/stdlib/*
boost/config/suffix.hpp
boost/config/user.hpp
boost/current_function.hpp
boost/detail/interlocked.hpp
boost/detail/sp_typeinfo.hpp
boost/detail/workaround.hpp
boost/enable_shared_from_this.hpp
boost/exception/detail/attribute_noreturn.hpp
boost/exception/exception.hpp
boost/memory_order.hpp
boost/non_type.hpp
boost/shared_ptr.hpp
boost/smart_ptr/*
boost/throw_exception.hpp
boost/type.hpp

这达到 365k,其中大部分代码实际上在boost/smart_ptr. 里面还有很多代码boost/config。如果您知道您的目标平台是什么,您可以减少boost/config/compilerboost/config/platformboost/config/stdlib. 那么绝大多数代码将在boost/smart_ptr.

于 2010-10-12T14:53:07.987 回答
0

bcp如果你这样做会少很多

bcp shared_ptr.hpp to_copy_to_my_project/.

我同意,这似乎还是太多了。

于 2010-10-12T12:29:52.163 回答
0

原因是 boost 支持无数的平台和编译器,并且 boost 模块自由地使用了其他 boost 模块。尽管其中大部分将是#ifdef:ed away bcp 还不够聪明,无法做到这一点。

我有类似的问题,所以我理解你的担忧。我尝试在没有平台设置的情况下运行预处理器,然后代码变得非常小。

最后,虽然我们将编译器升级到支持 C++ tr1 的版本并使用 std::tr1::shared_ptr。

有人可能会争辩说,6Megs 是为行业标准智能指针支付的一小笔代价,但并非所有开发人员/架构师都有相同的感受,而且由于我不是专制者,但我必须遵循团队的决定。

于 2010-08-14T19:03:35.757 回答
0

您可以只使用 stl 的共享指针: std::tr1::shared_ptr,这对于所有意图和目的都是 "is" boost::shared_ptr

于 2010-08-14T18:31:24.163 回答
0

我怀疑您可以删除 test 和 win32 文件夹-它们可能仅在测试时或在该平台上包含。我无法与大多数头文件交谈,但我知道 smart_ptr 做了很多疯狂的事情,因此您可以将 boost::shared_ptr<Foo> 转换为 boost::shared_ptr<const Foo>,这是大多数模板无法做到的. 如果你想要一个只适合几个文件的计数指针,写一个并不难,但它不会像 boost 那样好。

既然你说你在 Linux 上,为什么不把 boost 列为依赖项呢?

于 2010-08-14T18:38:20.023 回答