草庐IT

c++ - 是否有适合 'ownership-in-a-package' 的 'handles' 可用?

Handles除了指针之外还有适当的语义。所以对我来说这样的例子(从RuleofZero中提取):classmodule{public:explicitmodule(std::wstringconst&name):handle{::LoadLibrary(name.c_str()),&::FreeLibrary}{}//othermodulerelatedfunctionsgohereprivate:usingmodule_handle=std::unique_ptr;module_handlehandle;};使用unique_ptr作为句柄的“包中所有权”是一个不好的例子。首先,它

c++ - 需要帮助解决错误 C2664

我有以下代码给我这个错误main.cpp(41):errorC2664:'std::pairstd::make_pair(_Ty1,_Ty2)':cannotconvertargument1from'Handle'to'unsignedint&'我的示例程序是#include#includetypedefunsignedintu32;typedefu32Handle;structFile{File():ch(0),pageIdx(0){}Handlech:8;u32pageIdx;};intmain(){std::vector>toTrim;toTrim.reserve(64);Fil

c++ - 使用 native_handle() + pthread_cancel() 取消 std::thread

我正在将之前围绕pthreads的线程包装器转换为std::thread。但是c++11没有办法取消线程。尽管如此,我还是需要取消线程,因为它们可能正在外部库中执行非常冗长的任务。我正在考虑在我的平台中使用给我pthread_id的native_handle。我在Linux(Ubuntu12.10)中使用gcc4.7。这个想法是:#include#include#includeusingnamespacestd;intmain(intargc,char**argv){cout线程被pthreads抛出的异常取消。我的问题是:这种做法会不会有什么问题(除了不可移植)?

c++ - 在结构中创建结构

我正在将一个在Visualc++6.0中创建的旧Cwindows驱动程序项目导入到visualstudio2012中。定义结构的方式导致vs2012中出现错误。typedefstruct{LINKLink;HANDLEhFile;BYTEhandleType;OVERLAPPEDOverlapped;CRITICAL_SECTIONcsIoCtrl;}USB_HANDLE,*PUSB_HANDLE;typedefstruct{USB_HANDLE;//erroroccursheresayingnothingwasdeclaredforUSB_HANDLELISTPipeList;BOO

c++ - 支持多态的Stored-by-Value Pool,如何使用智能指针?

介绍我有一个数据结构:值池。(不是指针池)当我调用create()时,它会返回Handle。到目前为止一切都很好。templateclassPool{std::vectorv;//storebyvalueHandlecreate(){....}}templateclassHandle{Pool*pool_;//pointerbacktocontainerintpool_index_;//whereIaminthecontainerT*operator->(){returnpool_->v.at(pool_index_);//i.e."pool[index]"}voiddestroy()

c++ - 如何用 C++20 协程说 Hello World?

出于学习目的,我尝试使用C++20协程制作过于复杂的“HelloWorld”程序:HelloWorldMessagesayHelloToWorld(){co_yield"Hello";co_yield"";co_yield"World";co_yield"!";}intmain(){for(autow:sayHelloToWorld()){std::cout为了准备这样的HelloWorldMessage生成器,我主要基于最新的clang警告消息和uncompletecppreferencepage还有这个example.所以我的结果如下。这里缺少什么?因为,我没有说你好,而是遇到了段

c++ - 编译器构造 : Handle references to unordered symbols

我有龙书,但它似乎没有处理那个话题......在大多数现代语言中,可以使用某些变量,即使它们在代码中的出现是无序的。示例classFoo{voidbar(){plonk=42;}intplonk;}在函数之后声明变量plonk并不重要。问题有没有什么最佳实践/有用的模式来实现这个?我想到了两种方法:在解析时为看不见的符号添加虚拟符号。当声明被解析时,这些虚拟符号会被它们的真实符号所取代。解析后,我们可以检查是否有剩余的虚拟对象,如果有则输出错误。解析时不要做任何符号的事情,而只创建AST。在通过AST解析步骤后,根据节点添加符号。例如一个类节点添加child的符号并在之后处理它们。例如

c++ - GNU 使 : how to handle sub-projects

ProjFolder\Subfoldersources.cppmakefilemakefileSubfolder应该是一个单独的外部存储库,在checkout项目时拉入。当我将makeall调用到顶级makefile时,将执行以下配方:all:$(NAME).elf$(NAME).s19$(NAME).hex$(NAME).elf:$(OBJECTS)$(LDSCRIPT)Subfolder/lib.amake-CCppAudioPeriphsall@echo"...linking"$(CC)$(OBJECTS)Subfolder/lib.a$(LDFLAGS)$(LIBS)-o$@如

c++ - 用于跟踪 CreateFile 调用的 Pin 工具

我制作了一个pin工具来转储CreatFilewin32调用(在我的例子中是CreateFileW)及其返回值。它看起来像这样:/*...*/VOIDImage(IMGimg,VOID*v){RTNcfwRtn=RTN_FindByName(img,"CreateFileW");if(RTN_Valid(cfwRtn)){RTN_Open(cfwRtn);RTN_InsertCall(cfwRtn,IPOINT_BEFORE,(AFUNPTR)CreateFileWArg,IARG_ADDRINT,"CreateFileW",IARG_FUNCARG_ENTRYPOINT_VALUE,

c++ - 强制处理类中的所有成员变量

是否有一个概念可以确保向现有类添加成员会产生某种错误/警告,以防实现者忘记扩展应处理所有成员的方法?如果一个类实现了几个必须接触所有元素的方法(例如导入/导出),那么很容易忘记一个或多个方法来适应。编译器不会识别它,并且在很多情况下行为会符合预期(当然除了你有正确的测试。)我目前的尝试是在每个可能被遗忘的方法中测试类的大小。但是当然这不容易阅读,不安全并且不独立于编译器/平台/构建类型(所以我不喜欢它)。classC{intelement1;intelement2;intelement3;实现可能隐藏在不同的/大文件中:voidC::import_me(){assert(sizeof(