如何“重置”/“取消”一个boost::optional ? optional<int> x; if( x ) { // We won't hit this since x is uninitialized } x = 3; if( x ) { // Now we will hit this since x has been initialized } // What should I do here to bring x back to uninitialized state? if( x ) { // […]
哪些boost库只是头文件? 哪个需要构build库? 这样的清单是否存在?
我使用boost::split方法来分割一个string,如下所示: 我首先确保包含正确的头文件来访问boost::split : #include <boost/algorithm/string.hpp> 然后: vector<string> strs; boost::split(strs,line,boost::is_any_of("\t")); 和线是一样的 "test test2 test3" 这是我如何使用结果string向量: void printstrs(vector<string> strs) { for(vector<string>::iterator it = strs.begin();it!=strs.end();++it) { cout << *it << "——-"; } cout << endl; } 但为什么在结果strs我只能得到"test2"和"test3" ,不应该是"test" , "test2"和"test3" ,string中有\t (tab)。 2011年4月24日更新:在我更改了printstrs一行代码后,我可以看到第一个string。 我变了 cout << *it << "——-"; 至 cout << *it << endl; 它似乎"——-"以某种方式覆盖了第一个string。
我听到在论坛上使用std::function<>会导致性能下降。 这是真的吗? 如果属实,这是一个很大的性能下降?
我最近看到,如果命令行input是无法parsing的,那么boost program_options库会抛出一个logic_error 。 这挑战了我关于logic_error与runtime_error假设。 我认为逻辑错误( logic_error及其派生类)是内部失败导致的问题,通常以内部API的非法参数的forms遵守程序不variables。 从这个意义上说,它们大体上等同于ASSERT,但意味着在已发布的代码中使用(与ASSERT不同,它们通常不会编译成已发布的代码)。在将不同软件组件集成到debugging/testing版本中的情况下或者失败的后果是使得向用户提供关于无效不变条件的运行时反馈是重要的。 同样,我认为runtime_error是专门由程序员控制之外的运行时条件产生的:I / O错误,无效的用户input等。 然而,program_options显然是很重要的(主要是?)作为parsing最终用户input的手段,所以在我的思维模型下,它肯定会在input错误的情况下抛出一个runtime_error 。 我哪里错了? 你是否赞同exceptioninput的提升模式?
你必须通过删除新的返回相同的指针,或者你可以传递一个指针到一个基types的指针? 例如: class Base { public: virtual ~Base(); … }; class IFoo { public: virtual ~IFoo() {} virtual void DoSomething() = 0; }; class Bar : public Base, public IFoo { public: virtual ~Bar(); void DoSomething(); … }; Bar * pBar = new Bar; IFoo * pFoo = pBar; delete pFoo; 当然这大大简化了。 我真正想要做的是创build一个充满boost :: shared_ptr的容器,并将其传递给一些代码,当它完成时将它从容器中删除。 […]
有没有一些“标准”的方法,或者我能做的最好的方法是直接通过从gregorian::date(1970,1,1)减去来计算它?
我不知道如何用C ++ 0x编译器来构buildBoost。 必须给bjam哪个选项? 应该修改user.config文件吗?有人可以帮助我吗? 最好的,维森特
我在命名约定之间为type :: boost :: shared_ptr模板之间进行了翻转。 例如: typedef boost::shared_ptr<Foo> FooPtr; 在决定一个约定之前,我想看看其他人使用什么。 你的约定是什么? 编辑: 对于在Foo里嵌套typedef的人来说,Foo现在是否“意识到”它将如何传递呢? 它似乎打破封装。 这个怎么样: class Foo { public: typedef std::vector<Foo> Vector }; 你现在不会这样做,是吗? 🙂
当我试图在我的电脑上编译Boost库时,我得到“未知的编译器版本 – 请运行configuretesting并报告结果”。 我有最近的升压(截至date) – 1.58.0。 不提升支持MSVC 14.0呢? 我如何“运行configurationtesting”? 截图 。