我不确定初始化是类的成员的shared_ptr的好方法。 你能告诉我,在C::foo()select的方式是好还是有更好的解决scheme? class A { public: A(); }; class B { public: B(A* pa); }; class C { boost::shared_ptr<A> mA; boost::shared_ptr<B> mB; void foo(); }; void C::foo() { A* pa = new A; mA = boost::shared_ptr<A>(pa); B* pB = new B(pa); mB = boost::shared_ptr<B>(pb); }
我已经在/ usr / local(包含在/ usr / local / include / boost和库在/ usr / local / lib / boost中)中安装了最新版本的boost,现在我试图从源代码安装Wt cmake(版本2.6)似乎无法find升压安装。 它试图提供有关设置BOOST_DIR和Boost_LIBRARYDIR的有用build议,但是我无法通过调整这些variables来使其工作。 我得到的最新的错误消息是它找不到库,但似乎表明它正在使用“/ usr / local / include”作为包含path,这是不正确的(我可以'似乎修复它)。 有没有人有办法解决这个问题呢?还是我需要在cmake里面找出解决办法?
我已经查看了命名参数Idiom和Boost :: Parameter库 。 每个人都有什么优势? 是否有理由相互select一个,或者在某些情况下,每个人都可以比另一个更好(如果是,在什么情况下)?
我想在不使用QT的项目中使用信号/插槽库。 我有相当基本的要求: 用任意数量的参数连接两个函数。 信号可以连接到多个插槽。 手动断开信号/插槽连接。 体面的性能 – 应用程序是基于帧(即不基于事件),我想在每个帧中使用连接。 我已经阅读了libsigc ++和Boost.Signals之间的比较 。 我也读过Boost.Signals的糟糕performance。 但是,我知道还有其他的库,我还不确定应该select哪个库。 有信号/插槽库的build议吗?
我已经通过yum在Fedora 20上安装了boost,并尝试一些简单的例子。 不过,我无法从日志logging教程中编译第一个示例。 用g++ -c boosttest.cc编译g++ -c boosttest.cc可以正常工作,但是当我试图链接它时,却遇到了很多错误 g++ boosttest.o -o boosttest -lboost_log -lpthread 完整的错误日志: boosttest.o: In function `main': boosttest.cc:(.text+0x44): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' boosttest.cc:(.text+0x9a): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' boosttest.cc:(.text+0x167): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' boosttest.cc:(.text+0x1bd): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' boosttest.cc:(.text+0x28a): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' boosttest.o:boosttest.cc:(.text+0x2e0): more undefined references to `boost::log::v2s_mt_posix::trivial::logger::get()' follow boosttest.o: In function `boost::log::v2s_mt_posix::record::reset()': […]
可能重复: 提升图书馆 当我尝试(和失败)一个C ++项目时,我浏览网页时遇到了Boost。 我尝试阅读Boost网站,但是没有很好的简短描述为什么要使用Boost,究竟是什么。 我对Python非常喜欢的一件事是,一切都是内置的,跨平台的,Web请求,电子邮件,XML,JSON等等。Boost也是这样吗? 所以,足够的咆哮,我具体的回答问题: 什么是提升? 什么是使用Boost最重要的原因? 它是完全跨平台的吗? 是否更“安全”,然后定期自制代码,你很快忽略了一个缓冲区溢出等? 是否有任何链接到一个页面描述所有的提升一个或两个句子的模块 ?
boost :: shared_ptr可以释放存储的指针而不删除它吗? 我可以看到文档中不存在发布函数,在常见问题中解释了为什么它不提供发布函数,就像发布不能在不唯一的指针上发布一样。 我的指针是独一无二的。 我怎样才能释放我的指针? 或者哪个提高智能指针类使用,将允许我释放指针? 我希望你不会说使用auto_ptr 🙂
在STL或boost中是否存在用于python Xrange生成器的C ++等价物? xrange基本上每次调用++运算符都会生成递增的数字。 构造函数是这样的: xrange(first, last, increment) 希望能够像这样使用boost来做一些事情: foreach(int i, xrange(N)) 我知道for循环。 在我看来,他们是太多的样板。 谢谢 我的理由是: 我想要这样做的主要原因是因为我使用语音到文本软件,并且编程循环通常的方式很难,即使使用代码完成。 有可读性的结构要高效得多。 许多循环从零开始并递增1,这是范围的默认值。 我发现python构造更直观 for(int i = 0; i < N; ++i) foreach(int i, range(N)) 需要以范围为参数的函数: Function(int start, int and, int inc); function(xrange r); 我理解语言之间的差异,但是如果Python中的特定结构对我非常有用,并且可以用C ++高效地实现,那么我不会看到不使用它的原因。 对于每个构造都是C ++外来的,然而人们使用它。 我把我的实现在页面底部以及示例用法。 在我的领域,我使用multidimensional array,通常排名第四张量。 所以我通常会得到4个不同范围/增量的嵌套循环来计算规范化,索引等,这些不一定是性能循环,而我更关心正确性的可读性和修改能力。 例如 int function(int ifirst, int ilast, int […]
用CMake构buildBoost库会很好。 这里有各种尝试或正在尝试这样做的项目: Boost.CMake项目自v1.41.0以来没有更新过。 Ryppl项目( http://ryppl.org/ ),但网站现在已经死了。 自2013年以来,大部分Ryppl Github存储库都没有更新。自2013年以来, Ryppl Google Group的stream量并不高。 CMakeModularizationStatus维基页面指出它已经过时并redirect到已经解散的ryppl-dev邮件列表。 https://github.com/boost-cmake似乎被积极维护(截至2017年初)。 它的文档页面很轻, 目前还不清楚是否需要单独下载或复制Boost库。 它显示了一个“为C ++库build议的”标志,所以我们可以认为它还不是一个官方的Boost库组件。 问题是:是否有一个维护,最新的基于CMake的Boost构build目前的工作? [来自原来的问题,date为2013年8月] 我没有find“最好”的做法。 但是有两个好方法: 只要包括你需要的来源,如果这不是一个大问题,也没有太多的来源。 那么不要忘记像“-DBOOST_XXXXX_SOURCE”这样的定义,告诉boost源,他们不应该链接一个库。 (警告将会出现,因为这个macros在某些时候被重新定义了,那么你可以在MSVC的那些文件上忽略C4005,在CLang的时候很遗憾你不能使这个警告无声) 使用CMake的外部项目特性,并使用bjam构build系统的boost(这有一个很长的编译时间很大的不便,这就是为什么你应该去这个,只有当你使用很多boost库) 谢谢你们每一个人的帮助
我在我的程序中使用boost共享指针,我有一个类作为参数引用另一个对象。 我碰到的问题是make_shared函数要求所有参数是一个常量引用,如果我的类的构造函数不允许const引用参数传入,我会得到编译错误。 有没有人知道背后的原因? 另外,我能做些什么来解决这个问题吗? 什么是给我的问题的代码示例: class Object { public: Object(int& i) { i = 2; } }; int main(int argc, char *argv[]) { int i = 0; boost::shared_ptr<Object> obj = boost::make_shared<Object>(i); return 1; } 这会导致编译器错误,指出以下内容 :make_shared.hpp:185:错误:没有匹配的函数调用Object :: Object(const int&)注:候选是:Object :: Object(const Object&)注:Object :: Object(int& 如果对象构造函数的参数是一个const int,这个工作。 我很好奇为什么make_shared的行为如此。