为什么Boost的`bcp smart_ptr dir /`复制6MB的源代码?

时间:2010-08-14 18:26:36

标签: boost bcp

所以我想在我的项目中分离出从提升到使用的智能指针,我被引导使用bcp实用程序。

今天我编译完了bcp smart_ptr to_copy_to_my_project/

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

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

例如,它复制了以下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 ......

谢谢,Boda Cydo。

5 个答案:

答案 0 :(得分:1)

如果你想要的只是smart_ptr并且你对#define'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_ptrboost/config中仍有很多代码。如果您知道自己定位的平台,则可以关注boost/config/compilerboost/config/platformboost/config/stdlib。然后绝大多数代码都在boost/smart_ptr

答案 1 :(得分:0)

您可以使用stl的共享指针:std::tr1::shared_ptr,其中所有意图和目的都是“boost::shared_ptr

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

原因是boost支持无数平台和编译器以及升压模块使用其他升压模块。即使大部分都是#ifdef:ed,但是bcp还不够智能。

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

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

有人可能会说,6Megs是支付行业标准智能指针的一个小代价,但并非所有的开发人员/架构师都有同样的感觉,因为我不是暴君,但我不得不接受团队决定的事情。

答案 4 :(得分:0)

如果你做

bcp会复制很多

bcp shared_ptr.hpp to_copy_to_my_project/.

我认为这似乎太过分了。