草庐IT

c++ - boost::interprocess::basic_string 作为 std::string

我正在尝试用constboost::interprocess::basic_string&替换返回conststd::string&的类方法。我面临的主要挑战是这两个类之间的不兼容性,尽管它们的实现相似。为了更清楚的解释,我将把它放入代码中classA{std::stringm_str;conststd::string&StrVal(){returnm_str;}}现在这个类看起来像这样:typedefboost::interprocess::allocatorShmemAllocatorChar;typedefboost::interprocess::basic_string,Shm

c++ 我可以将 std::unique_ptr 与依赖注入(inject)一起使用吗?

我一直在使用原始指针进行依赖注入(inject),因此我决定将我的代码转换为使用shared_ptr。这行得通,但我想知道我是否可以改用unique_ptr?在我下面的示例中,MyClass将管理信用卡服务的生命周期。classPaymentProcessor{PaymentProcessor(??creditCardService)::creditCardService_(creditCardService){}private:CreditCardService*creditCardService_;}classMyClass{public:voidDoIt(){creditCard

c++ - 未捕获的 std::exception 在核心中不正确的堆栈跟踪

这是我的代码:#include#includeusingnamespacestd;usingnamespacestd::tr1;usingnamespacestd::tr1::placeholders;classEvent{public:typedefstd::tr1::functionHandler;voidset(Handlerh){m_handler=h;}templatevoidset(T*obj,Fmemfn){set(std::tr1::bind(memfn,obj));}voidoperator()(){m_handler();}staticvoidfire(Event*

c++ - std::forward of rvalue ref to lambda?

考虑以下两个片段:附件A:templateintperform_calc(CalcFuncT&&calcfunc){precalc();intconstcalc=calcfunc();postcalc();returncalc;}intmain(){perform_calc([]{return5*foobar_x()+3;});//toFutureperform_calc([]{return5*foobar_y()-9;});//toPast}图表B:templateintperform_calc(CalcFuncT&&calcfunc){precalc();intconstcalc=

c++ - 如何制作简化版的 boost::variant?

我有一组更简单的要求,不需要太多变体的机制。如果可以的话,我也不想依赖boost。我需要存储编译时已知的任意类型(可能是void)。它要么是可移动构造的,要么是可复制构造的,如果其中任何一个抛出异常,则允许包含的值未定义。除了这个值,它还可以包含::std::exception_ptr或::std::error_code.::boost::variant如果T会起作用允许无效。除了::boost::variant提供我在这种情况下实际上不需要的“永不空保证”。而且,如果我理解它是如何正确工作的,它与可以移动但不能复制的类型不太兼容。现在我正在编写大量重复的代码,我不应该编写这些代码来分

c++ - 我的 SFINAE 检查 std::map/std::vector 有什么问题?

我有一个简单的SFINAE场景来区分标准容器,如std::map:templatestructHasKeyType:sfinae_test{//(C)templatestaticYestest(typenameContainer::key_type*);//(A)templatestaticNotest(...);enum{value=(sizeof(test(null))==sizeof(Yes))};//(B)};与structsfinae_test{typedefcharYes;typedeflongNo;staticvoid*constnull;};当我用HasKeyType>

C++实现堆中值函数

根据此处找到的答案,https://stackoverflow.com/a/10931091/1311773,我正在尝试实现两个堆,以便计算运行中位数。我不熟悉堆,我不确定从哪里开始实现这里描述的这个功能。http://programmingpraxis.com/2012/05/29/streaming-median/我的目标是创建一个小型测试程序来有效地计算运行中位数,这样随着列表的增长,中位数不需要从头开始重新计算。使用两个堆,我应该能够做到,我只是对如何开始实现它犹豫不决。如有任何建议,我们将不胜感激。 最佳答案 std::p

c++ - std::find 用于继承对象 C++

1.所以我有:ClassA;ClassB:publicA;ClassC:publicB;2.还有一个B类型的指针vector:vectorvec;3.然后:C*ptr=newC();vec.push_back(ptr);那么问题来了,这样用std::find靠谱吗?std::find(vec.begin(),vec.end(),prt);此外,使用this->指针进行搜索可以吗?std::find(vec.begin(),vec.end(),this);//insideofatypeCobject提前致谢。 最佳答案 是的,这是安全

c++ - std::wostream_iterator

为什么C++中没有std::wostream_iterator?这有什么好的理由吗?#include#include#include#includeintmain(){std::vectormyvec={L"first",L"second"};std::wofstreamf("New.txt");//std::copy(myvec.begin(),myvec.end(),std::wostream_iterator(f));//Error//std::copy(myvec.begin(),myvec.end(),std::ostream_iterator(f));//Errorstd:

C++11:std ref 全局变量和非函数局部 thread_local 初始化顺序?

C++11中具有非平凡构造函数的全局变量是在静态初始化阶段在进入main之前构造的。同样,非函数局部thread_local变量是在每个线程的“thread_local初始化阶段”构建的。C++11标准是否规定了这些变量的构造顺序?在这两种情况下,如果有两个变量://globalscopeA::A(){b.f();}//AconstructorusesglobalbAa;Bb;C++11标准是否指定了它们应按什么顺序进行初始化,或者如果使用未初始化的变量应该产生错误?同样适用于非函数本地thread_local://globalscopeA::A(){b.f();}//Aconstru