草庐IT

c++ - 我可以使用 foo<T..., int, U...> 这样的模式部分特化模板吗?

如果可能的话,可以在不递归的情况下索引可变参数模板参数包。但是,GCC是refusingtopickupmypartialspecialization这里:templatestructelement_impl;templatestructelement_impl...,pair,pair...>>{typedefTtype;};prog.cpp:Ininstantiationof'element>':prog.cpp:52:34:instantiatedfromhereprog.cpp:47:79:error:invaliduseofincompletetype'structeleme

c++ - 对于类型 Class::Type,我可以从 const Class 派生 const Class::Type 吗?

我正在实现一个容器,例如:templateclassContainer{public:usingvalue_type=T;...};是否有从constContainer派生constvalue_type的好方法?背景:我已经通过嵌套模板类实现了迭代器类型:templateclassiterator_base{public:...Value&operator*()const;private:Container*c;};usingiterator=iterator_base;usingconst_iterator=iterator_base;工作正常,但iterator_base的第二个模

c++ - 我可以使用 CArchive 在 MFC 中序列化 STL 映射吗?

我需要把一个map的内容(key是int的ID,value是自定义的struct)写入一个文件,稍后从文件中加载。我可以在带有CArchive的MFC中完成吗?谢谢! 最佳答案 在MFC中,我认为最简单的方法是首先序列化map的大小,然后简单地遍历所有元素。你没有指定你使用的是std::map还是MFC的CMap,但是基于std::map的版本可以看起来像这样:voidMyClass::Serialize(CArchive&archive){CObject::Serialize(archive);if(archive.IsStori

c++ - 我可以解开 GCC 的 RTTI 名称吗?

使用gcc,当我使用typeid请求对象/变量的类型时,我从type_info::name方法得到的结果与我期望在Windows上得到的结果不同。我用Google搜索了一下,发现RTTI名称是特定于实现的。问题是,我想获得一个类型的名称,因为它会在Windows上返回。有没有简单的方法可以做到这一点? 最佳答案 如果这正是您要问的,那么对于type_info::name()返回的名称,没有编译器开关可以使gcc表现得像msvc。但是,在您的代码中,您可以依赖gcc特定的__cxa_demangle函数。事实上有anansweronS

c++ - 我可以在 C++ 中使用 [] 运算符来创建虚拟数组吗

我有一个庞大的代码库,最初是C语言,多年前移植到C++,它对大量空间数据的大型数组进行操作。这些数组包含表示点的结构和表示曲面模型的三角形实体。我需要重构代码,以便这些实体在内部存储的具体方式因特定场景而异。例如,如果点位于规则的平面网格上,我不需要存储X和Y坐标,因为它们可以即时计算,三角形也可以。同样,我想利用非核心工具,例如STXXL用于存储。最简单的方法是用put和get类型函数替换数组访问,例如point[i].x=XV;成为Pointp=GetPoint(i);p.x=XV;PutPoint(i,p);如您所想,这是对大型代码库进行的非常乏味的重构,在重构过程中容易出现各种

c++ - 我可以从调试二进制文件重建 C++ 源代码吗?

我有一个在调试中编译的C++应用程序(使用MinGW和Qt),但我丢失了一些主要更改,因为我的团队中有人忘记在源代码控制管理器中提交他的更改,并用其他更改覆盖了源代码。当我在调试中运行程序时(在QtCreator中),我可以在main中设置一个断点,然后查看源代码。有没有一种方法可以仅使用调试二进制文件来重建所有丢失的源文件?手动或自动。谢谢! 最佳答案 WhenIruntheprogramindebug(inQtCreator)Icansetabreakpointinmainandthenseethesourcecode.真的吗?

C++11 我可以确保 condition_variable.wait() 不会错过通知吗?

我让线程1执行以下代码:unique_lockul(m);while(condition==true)cv.wait(ul);线程2执行这段代码:condition=false;cv.notify_one();不幸的是,我遇到了时间问题:T1:conditioncheckstrueT2:conditionsettofalseT2:cv.notify_one()T1:cv.wait()线程1完全错过了通知并在wait()上保持阻塞状态。我尝试使用带有谓词但结果基本相同的wait()版本。也就是说,谓词的主体执行检查,但在它返回之前,条件的值被更改并发送通知。然后谓词返回。我该如何解决这个

c++ - 我可以在调用纯虚函数时禁用异常吗?

我有一些看起来像这样的代码:classWritable{public:virtualvoidputc(constcharch)=0;protected:virtual~Writable(){};};classReadable{public:virtualchargetc()=0;protected:virtual~Readable(){};};注意两个虚函数。使用arm-none-eabi-gcc编译此代码(连同我的其他代码),并与-fno-exceptions链接产生此输出:arm-none-eabi-size--format=berkeleybareCortexM.elftextd

c++ - 我可以使用 always emplace 代替 insert 来插入单个元素吗?

我想知道在向STL容器中插入单个元素(如set、unordered_set)时,是否始终使用emplace来替换insert是否可以?从签名来看,emplace比较简单,不涉及重载。停止使用insert并一直使用emplace有什么问题吗?注意:有很多问题询问emplace和insert/push_back等之间的区别(例如here、here和here)我理解其中的区别,而且在我看来emplace在各个方面都更好。我只是想确认是否可以弃用insert。 最佳答案 有一些例子here可以适应emplace和insert,显示行为可能不

c++ - 我可以重载模板变量吗?

我想声明这样的东西:templateconstexprenable_if_t,int[]>foo={1,2};templateconstexprenable_if_t,int[]>foo={10,20,30};但是当我尝试I'mgettingthiserror:error:redeclarationoftemplateconstexprstd::enable_if_t::value,int[]>foonote:previousdeclarationtemplateconstexprstd::enable_if_t::value,int[]>foo我觉得这应该是合法的,因为永远不会超过一