草庐IT

移植修复

全部标签

c++ - 使用指向在结构内声明的字段的指针(又名 CONTAINING_RECORD 宏)计算指向整个结构的指针的可移植方法

例如,在Winnt.h中定义了众所周知的CONTAINING_RECORD()宏:#defineCONTAINING_RECORD(address,type,field)((type*)(\(PCHAR)(address)-\(ULONG_PTR)(&((type*)0)->field)))或在FreeBSD中:#defineCONTAINING_RECORD(addr,type,field)\((type*)((vm_offset_t)(addr)-(vm_offset_t)(&((type*)0)->field)))或在Linux中:#defineoffsetof(TYPE,MEM

c++ - 无法使用 fixup_bundle() 与 Qt 创建可移植包

我已经在其他帖子上搜索过这个问题,但目前还没有。所以我来了。我想创建一个可移植的包。便携,如“我可以在任何OSX机器上运行它,即使我需要的库(Qt)没有安装”。不幸的是,我不知道如何使用fixup_bundle()(这似乎是正确的工具)来实现这个目标。这是我最小的CMake生成的C++项目:主要.cpp#include#includeintmain(){QStrings("Hello,world!");std::coutCMakeLists.txtcmake_minimum_required(VERSION2.8.11)project(test)#ThatpartbecauseIuse

c++ - Armadillo 移植 imagesc 从矩阵保存图像位图

我有这个matlab代码来显示super频谱图后的图像对象(stft,耦合plca...)t=z2*stft_options.hop/stft_options.sr;f=stft_options.sr*[0:size(spec_t,1)-1]/stft_options.N/1000;max_val=max(max(db(abs(spec_t))));imagesc(t,f,db(abs(spec_t)),[max_val-60max_val]);得到这个结果:我使用Armadillo成功地移植到C++lib并得到mat结果:matf,t,spec_t;问题是我不知道如何转换像image

c++ - 在 C++ 中获取变量地址的最可移植和可靠的方法

使用&如果变量类型已重载,获取变量地址可能会出现问题operator&().例如,_com_ptr_有operator&()重载修改对象的副作用。现在我有一组复杂的模板,其功能如下:templatevoidprocess(constT*object){//whatever}templatevoidtryProcess(T&object){process(&object)}在tryProcess()我需要一个T*指针保存T类型的实际对象的地址.tryProcess()的上述实现只有在classT时才能正常工作没有operator&()重载。所以如果我调用tryProcess>()我可以获

c++ - 如何将 Qt qml 移植到带有 C++ 后端的 Web 服务器

是否可以用QML编写我的应用程序的前端,用C++编写后端并以某种方式编译它,以便我可以将它部署到像Apache或JBoss这样的网络服务器上,以便可以从网络中访问它浏览器?如果是,您有如何执行此操作的示例吗?非常感谢您的回答:)我试图在Internet上找到我的问题的答案,但没有成功。 最佳答案 QmlWeb是一个JavaScript库,它能够解析QML代码并使用普通HTML/DOM元素和CSS中的绝对位置从中创建网站,将QML属性转换为CSS属性。QmlWeb是一个主要由LauriPaimen开始的小项目,他开发了几年它,现在是一

c++ - C++ 中灵活数组成员的可移植仿真?

我正在写一个skiplist.我有什么:templatestructSkipListNode{Tdata;SkipListNode*next[32];};这段代码的问题在于它浪费了空间——它要求所有节点都包含32个指针。特别是考虑到在典型的列表中,一半的节点只需要一个指针。C语言有一个称为灵活数组成员的巧妙特性可以解决这个问题。如果它存在于C++中(即使对于普通类),我可以编写如下代码:templatestructSkipListNode{alignas(T)charbuffer[sizeof(T)];SkipListNode*next[];};然后用工厂函数手动创建节点,并在删除元素

c# - 将(非托管)C++ 移植到 C# 与使用 C++ 作为 C# 应用程序中的 DLL

我有一个用普通旧C++(无.NET/托管代码)编写的代码库,我正在将使用此代码的应用程序移植到C#。我面临两个选择:用C#重写C++代码,实现同样的功能;将C++编译为DLL,并将其用作C#应用程序中的库。我是C#的新手,非常不熟悉在C#应用程序中使用非托管代码库的含义(或者如果有的话)。代码本身大小适中;用C#重写可能只需要几天时间,但我的想法是让代码保持原样也可以让我在其他应用程序中使用它(并在UNIX等上编译它)。做这个决定时我应该注意哪些事情?在C#应用程序中使用DLL是否有任何主要缺点或问题? 最佳答案 我会使用C++/C

c++ - 如何修复 "invalid operands to binary expression"错误?

我没有使用C++的经验,一直卡在编译器生成二进制表达式的无效操作数classAnimal{public:intweight;};intmain(){Animalx,y;x.weight=33;y.weight=3;if(x!=y){//dosomething}}我想使用x并与y进行比较,而不修改主代码中的代码,即(x.weight!=y.weight)。我应该如何从外部类或定义中解决这个问题? 最佳答案 或者,您可以将运算符重载添加为非成员:#includeusingnamespacestd;classAnimal{public:i

c++ - 从 weak_ptr 泄漏原始指针的可移植 hack

我有一个由shared_ptr组成的对象结构,加上weak_ptr以避免循环。原始指针是不行的,因为boost::serialization在通过对象跟踪作为序列化时间进行反序列化时需要恢复共享指针和弱指针。对象生命周期模式很复杂(粒子模拟)但完全可以预测。每当我使用weak_ptr::lock()时,我确信指针仍然有效。通常,我使用lock().get(),因为我只需要在很短的时间内使用该对象。现在,lock().get()对性能有影响,因为它会增加共享计数(在lock()中),然后在不久之后减少它(临时shared_ptr被破坏)。这boost.develpost从2002年开始,

c++ - 在 64 位系统的低地址分配内存的最可靠/可移植的方法是什么?

我需要分配位于前32GB虚拟地址空间内的大内存块(供我的自定义分配器使用)。我想,如果我需要,比方说,1MBblock,我可以使用mmap和MAP_FIXED_NOREPLACE(或VirtualAlloc)从低地址开始以递增的方式进行迭代,比如说,1MB,直到调用成功。从上一个成功的block继续下一个block。这听起来很笨拙,但至少它对操作系统地址空间布局变化和ASLR算法变化有一定的鲁棒性。根据我对当前操作系统布局的理解,前32GB应该有足够的可用内存,但也许我遗漏了什么?在Windows、Linux、OSX、iOS或Android中有什么东西可以击败这个方案吗?有没有更好的办