草庐IT

双重性

全部标签

具有镜像层次结构的 C++ 双重分派(dispatch)

以下类层次结构表示抽象资源处理程序和资源层次结构。两者都将接口(interface)作为基类。现在想象你写了一个系统,你可以在这些接口(interface)下实现多个特定的资源系统。这里只是一个例子。特定的主类创建从stuff派生的资源。现在,当创建的资源被传递给基接口(interface)时,它作为指向基资源类的指针传递,但我想处理特定资源并访问其特定属性。我知道双重分派(dispatch),但我认为它在这种情况下不起作用。我想阻止RTTI和dynamic_casts。您对处理此类案件有何建议?classresource;classmain_resource_handler{publ

c++ - 如何根据 C++ 中的语言环境设置解析双重格式

我发现我一直使用的strtod方法有问题。首先它不理解非点小数点分隔符,所以我不得不使用这个:std::replace(sSource.begin(),sSource.end(),getDecimalSeparator(),'.');但是不,我发现了另一个问题,但还没有找到解决方法。如果值为负数并且千位分隔符是一个点(“.”),strtod返回0并且_EndPtr指向字符串的开头://PRECONDITIONS://*digitgroupingsymbol(thousandsseparator)="."//*decimalsymbol=","//*digitalgrouping="12

c++ - 这个针对 MSVC 双重检查锁定错误和函数静态的解决方案有什么问题?

尚不完全清楚为什么这不起作用。托管对象仍然被构造两次:/**Returnsanobjectwithstaticstorageduration.ThisisaworkaroundforVisualStudio2013andearliernon-threadsafeinitializationoffunctionlocalobjectswithstaticstorageduration.Usage:@codemy_class&foo(){staticstatic_initializerinstance;return*instance;}@endcode*/templateclassstat

c++ - 避免使用 std::unordered_map(和其他)进行双重搜索或不必要的构造

我想在std::unordered_map上找到一个带有键的元素,或者如果它不存在则插入它。来自cppreference.com:std::unordered_map::emplaceInsertsanewelementintothecontainerconstructedin-placewiththegivenargsifthereisnoelementwiththekeyinthecontainer....Theelementmaybeconstructedeveniftherealreadyisanelementwiththekeyinthecontainer,inwhichca

c++ - 删除对象时双重释放或损坏

我有一个名为“Packet”的类,带有这个破坏:classPacket{...RequestPtrreq;~Packet(){if(req&&isRequest()&&!needsResponse())deletereq;deleteData();}};RequestPtr看起来像:typedefRequest*RequestPtr;classRequest{...~Request(){}}问题是当deletereq;和~Request(){}被执行时,我得到这个错误:***glibcdetected***doublefreeorcorruption(fasttop):0x000000

c++ - 共享指针的双重检查锁定

免责声明:我有Java背景,因此,我不知道C++(和相关库)的许多内部机制是如何工作的。我已经阅读了足够多的资料,知道双重检查锁定是邪恶的,正确和安全地实现单例模式需要适当的工具。我认为以下代码可能不安全,受编译器重新排序和未初始化对象分配的影响,但我不确定我是否遗漏了一些我不了解该语言的内容。typedefboost::shared_ptrAPtr;APtrg_a;boost::mutexg_a_mutex;constAPtr&A::instance(){if(!g_a){boost::mutex::scoped_locklock(g_a_mutex);if(!g_a){g_a=bo

c# - gtest (C++) 和 nunit (C#) 中双重比较的区别

我已经将带有gtest测试的c++项目移植到带有nunit测试的c#项目。现在我遇到了浮点精度的问题。在nunit测试中我有问题(红色)Assert.AreEqual(0.7,7*0.1);在gtest测试中我有:ASSERT_DOUBLE_EQ(0.7,7*0.1);没问题(绿色)现在的问题是为什么??? 最佳答案 GoogleTest的ASSERT_DOUBLE_EQ()验证实际值是否在预期值的4个ULP之内(更多信息请参见https://github.com/google/googletest/blob/main/docs/a

c++ - postEvent 是否在发布后释放事件? (双重自由或腐败)

我正在使用QCoreApplication::postEvent发布从QEvent继承的自定义事件。我读到过,在使用postEvent时,必须有堆分配事件。但我不确定谁负责释放它。因此,我尝试使用std::shared_ptr。但是,当我使用std::shared_ptr创建我的事件时,出现了这个错误:doublefreeorcorruption(fasttop)这是否意味着QEvent负责释放事件,这样我就可以创建事件而不用删除它?代码如下:classMyCustomEvent:publicQEvent{...}std::shared_ptrevt(newMyCustomEvent(

c++ - 如何在 C++ 中引用双重模板化的自由函数

我有一个模板类,我在其中定义了引用该模板类的自由函数。这些免费功能也以不同的参数为模板。我可以从类之外调用自由函数。但是,我找不到一个自由函数调用另一个函数的正确语法。简单示例:templateclassFoo{templatefriendSf(constFoo&){returnS();}templatefriendSg(constFoo&s){returnf(s);//Seebelow,wheninstantiated,yields'nomatchingfunctionforcalltof(constFoo&)'}};floattest1(){Fooo;returnf(o);//Co

c++ - 写入文件的 C++ 中双重类型的意外舍入

我正在开发一个C++程序,其中包含大量double类型的数字(数百万和数十亿的值,小数点右侧只有几位)。我正在对这些数字进行计算,然后将结果打印到文本/CSV文件中。我注意到在文本文件中,我所有的数字似乎都四舍五入(到六位数)。因此,值13,169,911在我的输出文件中显示为13,169,900。这种四舍五入是否只发生在打印品上?为了获得变量中的全部数字,我是否只需要在写入文件时指定一些内容?我在下面包含了一个写入文件代码的示例:voidPrintPropFinance(vector&PF,intNumProps,intIterations,intForecastLength,str