草庐IT

c++ - 自动化 LLVM 风格的 RTTI 代码

对于特定的类层次结构,我需要知道基类引用是否是特定派生类的实例。由于不同的原因,我不能在这里使用标准的C++RTTI,我需要实现一个自定义的instanceof机制。LLVM-stleRTTI会满足我的需求,但我想知道是否存在一种方法(以某种方式使用模板)来自动执行classof方法?是否有其他/更简单的实现这种机制可以知道基类是否是派生类的实例?我的约束:我没有多重继承,但我有多个继承级别。对内存占用的影响必须尽可能小,并且不可能执行动态分配。 最佳答案 Iwaswonderingifitwouldexistsaway(someh

c++ - 没有除了风格和性能的练习?

我开始将noexcept添加到我的代码中,但我想知道将它添加到内联函数中是否明智。我假设优化器会在明显不需要时省略运行时检查……但是从人/风格的角度来看,是否值得将noexcept添加到诸如getter、设置、增量函数等微不足道的函数中?我认为这是完全明显的东西的视觉困惑。我正在讨论内联函数省略noexcept的规则,但正常的.hpp/.cpp函数如果不抛出则必须拥有它。其次,我有大量代码根本无法抛出,因为它没有分配(在我的国际象棋引擎中),其中不包含STL或任何其他可能失败的代码,因此始终可以保证成功。noexcept不会因为运行时检查而减慢它的速度吗?是否有人使用宏在DEBUG构建

c++ - 如何在 vim 中将 C 风格的 printf 转换为 C++ 风格的 cout

我移交了一些遗留代码,首先我想看看是否有可能改变类似的东西printf("test%d\n",var);进入std::cout其中有很多,手动完成它们非常耗时。有没有办法使用vim来实现这一点?我得到的最远的是:%s/printf(\(.*\),\(.*\));/std::cout但这只会让我着迷std::cout我可以将clang格式应用于代码,因此在printf中我可以保证逗号后始终有一个空格。在此示例中,空格位于逗号和var之间。理想情况下,此vim命令将能够检测百分号以了解其中有多少变量,还可以检测\n以了解何时将其替换为std::endl。请指教。

c++ - 使用 Boost Hana 反射(reflect) C 风格数组

BOOST_HANA_DEFINE_STRUCT是声明具有内省(introspection)的结构时的绝佳宏。如果我有这样的结构:structPerson{std::stringname;std::stringlast_name;intage;};我们可以像这样重新定义它来添加内省(introspection):structPerson{BOOST_HANA_DEFINE_STRUCT(Person,(std::string,name),(std::string,last_name),(int,age));};但是如果我们有这样的结构呢:structPerson{floateye_di

显式类型转换(C 风格转换)的 C++ 转换符号和 static_cast 的多种解释

Paragraph4of[expr.cast](在撰写本文时可用的最新C++标准草案中)描述了C样式转换的行为如下:Theconversionsperformedbyaconst_­cast,astatic_­cast,astatic_­castfollowedbyaconst_­cast,areinterpret_­cast,orareinterpret_­castfollowedbyaconst_­cast,canbeperformedusingthecastnotationofexplicittypeconversion.Thesamesemanticrestrictionsan

c++ - 封装与结构——这被认为是糟糕的风格吗?

我在一个CUDA项目中有很多类,这些类大部分都得到了美化structs和在组成上相互依赖:classA{public:typedefboost::shared_ptrPtr;A(uintn_elements){...//allocateelement_indices};DeviceVector::iteratorget_element_indices();private:DeviceVectorelement_indices;}classB{public:B(uintn_elements){...//initializemembers};A::Ptrget_a();DevicePoin

c++ - 对谷歌风格指南的 Sublime Text 支持

我正在使用sublimetext3编写C++代码。我们关注GooglestyleguideforCPP.我正在寻找任何使用样式指南作为引用来提供自动重新缩进和linter支持的插件。 最佳答案 我刚试过https://github.com/timonwong/SublimeAStyleFormatter它似乎工作正常。您必须将用户设置(“SublimeText”>“首选项”>“SublimeAStyleFormatter”>“设置-用户”)编辑为以下内容://Thisisasimplifiedsettingsfilethatonly

c++ - 这是糟糕的 C++ 风格还是编辑器错误?

我在我正在试用的新C++编辑器(CLion)中有这段代码:structscreenPoint{floatx=0,y=0;screenPoint(floatx_,floaty_):x{x_},y{y_}{}};structposition{screenPointul;floatwidth=0,height=0;position(screenPointp,floatw,floath):ul{p},width{w},height{h}{}};接近尾声的是初始化语句ul{p},我认为这是使用大括号初始化的有效C++方法。然而,CLion提示道:初始化器中的不兼容类型:“float”和“scre

c++ - 我的 C++ 类必须是 Windows 8 Metro 风格应用程序中的引用类吗?

我知道,如果我想将我的C++代码作为WinRT组件共享给.Net和JavaScript代码,我必须将我的类声明为publicrefMyClasssealed。但是,如果我有一个我只想在我的应用程序中使用的类,它是否需要是一个ref类?假设我有一个简单的建筑类。是否可以定义如下#pragmaonceclassBuilding{public:Building(intcap);~Building(void);intget_capacity(){returncapacity;}private:intcapacity;};然后像这样使用std::shared_ptrbldg=std::make_

c++ - 链表节点的 RAII 风格 C++ 类

我现在正在玩链表作为练习。我在CrackingTheCodingInterview中查看的示例book没有LinkedList(manager)类,只有Nodes,你在main函数中卡在headNode上。我查阅了C++实现,但大多数似乎比C++更像C风格,即不是面向对象的。它们使用结构,没有类,并且有一个用于删除列表的静态方法,您需要明确记住要调用该方法。我想编写一个合理的RAII(资源获取即初始化)风格的C++类,带有合理的析构函数来处理内存释放,我只想使用一个Node类(没有LinkedList类)。我看到这个工作的唯一方法是让Node的析构函数删除下一个Node(如果有的话),