草庐IT

c++ - b2 vs bjam 用于构建 Boost 库

我使用b2.exe和bjam.exe为VS2013构建了64位架构的Boost。根据Boostdocumentation,b2必须在bjam上使用。我注意到的差异是:b2中的.lib文件的大小与相应的bjam文件的大小不同。使用bjam提供动态.lib库(不带-s标记,如here所述),但它不提供要链接到的.dll文件(那么现在该怎么办?),而使用b2会同时提供静态库和动态库以及.dll文件。但使用b2的问题是,它提供了两个动态.lib文件-一个以boost_xxxx.lib开头,另一个以libboost_xxxx.lib开头,两者大小不同。这是为什么?我还提到了使用构建选项--bui

c++ - 当我从虚拟基派生 D 时,为什么 VS2015 中的 sizeof(D) 增加了 8 个字节?

我正在使用C++14§3.11/2中的示例:structB{longdoubled;};structD:virtualB{charc;}在clang、g++和VS2015中运行下面的代码片段之后#includestructB{longdoubled;};structD:/*virtual*/B{charc;};intmain(){std::cout我得到了以下结果:clangg++VS2015sizeof(longdouble)16168alignof(longdouble)16168sizeof(B)16168alignof(B)16168sizeof(D)323216alignof

c++ - 编译时抽象类处理中的 clang vs gcc

其中之一issuesnlohmann/json开源库引起了我的注意。我有一个案例的最小复制品doesnotcompile在少数版本的桌面gcc(4.8、4.9,也尝试过5+)下,但使用macclang和Androidndk的gcc4.9编译得很好#includestructbase{virtualvoidfoo()=0;};intmain(){(void)numeric_limits::is_signed;}GCC正在尝试实例化std::numeric_limits使用基类而不是派生类:/usr/include/c++/4.8/limits:Ininstantiationof'stru

c++ - 使用 GTest 和 GMock : shared vs. 静态库进行测试

我认为这个问题可能违反了网站的一些问答标准,因为我可能收到的答案可能被视为意见驱动。尽管如此,它还是...假设我们正在处理一个C++项目,使用CMake来驱动构建/测试/打包过程,并使用GTest和GMock进行测试。进一步假设我们项目的结构如下所示:cool_project||--source||||--module_foo||||||--(bunchofsourcefiles)||||--module_bar||||--(yetmoresourcefiles)||--tests||--module_foo||||--(testsformodule_foo)||--module_ba

c++ - 在 C 中包装 C++ 成员函数 - Visual Studio 2013 模板问题

我正在创建一个轻量级跨平台插件框架,它在应用程序和插件之间使用C接口(interface)(通常,但不总是,用C++编写)。我在帮助C++应用程序和插件编写者方面面临的挑战之一是找到一种简单的方法来跨C接口(interface)公开C++对象功能。我目前的解决方案感觉很简单,并使用模板“构建”基于thisgreatstackoverflowquestionandanswer包装底层C++成员函数的C签名函数。templatestructMemberFuncWrapper;template//C++memberfunctionstructMemberFuncWrapper{staticR

c++ - dladdr : pointer-to-function vs pointer-to-object

希望这是一个相当简单的C++问题(而不是语言律师问题)。如何在C++中使用GNU扩展dladdr?通常人们会用C编写以下内容:#ifndef_GNU_SOURCE#define_GNU_SOURCE#endif#includestaticvoidwhere_am_i(){}intmain(){Dl_infoinfo;dladdr((void*)&where_am_i,&info);return0;}但是使用clang可以看到转换可能无效:$clang--versionDebianclangversion3.6.2-3(tags/RELEASE_362/final)(basedonLLV

c++ - 性能差异:std::accumulate vs std::inner_product vs Loop

今天,我想分享一些在尝试实现这个简单操作时让我大吃一惊的事情:我发现了执行相同操作的不同方法:通过使用std::inner_product。实现谓词并使用std::accumulate函数。使用C风格的循环。我想通过使用QuickBench并启用所有优化来执行一些基准测试。首先,我比较了两个具有浮点值的C++替代方案。这是通过使用std::accumulate使用的代码:constautopredicate=[](constdoubleprevious,constdoublecurrent){returnprevious+current*current;};constautoresul

c++ - 为什么这个 get_index 实现在 VS2017 上失败了?

巴里给了我们thisgorgeousget_indexforvariants:templatestructtag{};templatestructget_index;templatestructget_index>:std::integral_constant...>(tag()).index()>{};按如下方式使用:usingV=variant;constexprconstsize_tN=get_index::value;//1它在Clang(OSX)中运行良好。但在VisualStudio2017中I'mgetting以下内容:(10):errorC2039:'index':is

C++ 将浮点值转换为枚举 - 但不是 VS 2010

我有一些模板代码适用于Xcode4.5和LLVM3.0,但适用于VS2010ExpressC++工具链(v10.0.30319.1)。我正在使用我无法控制的第三方API。它以只能由API函数解释的黑盒“blob”形式为我的代码提供值://API_Secretisablack-boxencapsulationofafloating-pointnumberorabooleanvalue.//Itisprovidedbyathird-partyAPI,withassociatedaccessfunctions.//Forallintentsandpurposes,it'sacompleteb

c++ - 双缓冲故障(2013 年 12 月 17 日更新)

介绍和相关信息:我有一个复杂的绘画要在我的主窗口的WM_PAINT处理程序中实现。我已经提交了下面的图片来说明它:主窗口具有静态控件,而不是具有SS_NOTIFY样式的按钮。当用户点击它们时,程序中会发生某些操作,这些操作目前无关紧要。下图显示了主窗口中静态控件的位置:橙色面板上的map是一个EMF文件,左上角和右上角的logo是PNG文件,其他图片是bitmaps。VisualStyles通过#pragma指令启用。我还使用GDI+和GDI。项目被创建为空项目,我已经从“头”开始编码了所有内容。为了实现这个任务,我决定在WM_PAINT中绘制整张图片,并在将透明的staticcont