草庐IT

C++智能指针之unique_ptr

全部标签

c++ - 如何将成员函数作为函数指针传递?

我想给worker类(Class)增加一个记录器功能,如何将成员函数作为函数指针传递?使用mem_fun?这里是代码示例:classWork{public:void(*logger)(conststring&s);voiddo_sth(){if(logger)logger("onlog")};};classsP{public:voidlog(conststring&s)(cout编辑:我不想使用void(P::*xxx)()因为它坚持类P...我知道C++隐藏某事,真正的日志函数是:voidlog(P&p,conststring&s),而真正的项目是这样的:我创建了一个CDialog,

C++ 将方法指针作为模板参数传递

我有一个这样的调用函数:templatevoidCallMethod(T*object){(object->*method)(args);}虽然这很完美:void(*function)(A*)=&CallMethod;这段代码在第二行没有编译错误:void(A::*method)()=&A::method;void(*function)(A*)=&CallMethod;有什么办法可以解决吗?我需要CallMethod模板获取指向存储在变量中的方法的常量指针。 最佳答案 所有模板参数必须在编译时已知。所以如果method真的是一个变量

c++ - 什么类型的指针操作

我搜索了很多,但找不到任何有用的东西-但后来我不确定我正在搜索正确的东西。是否有任何标准定义的标量必须至少与指针一样大?IE。sizeof(?)>=sizeof(void*).我需要它,因为我正在编写一个小型垃圾收集器并且想要类似这样的东西:structTag{uint32_tdesc:sizeof(uint32_t)*8-2;//pointertotypedescriptoruint32_tfree:1;uint32_tmark:1;};我更喜欢根据标准有效的东西(如果我们这样做,我很惊讶sizeof(uint32_t)*8-2对于位域定义有效-但VS2010允许它)。那么size_

c++ - 在 LLVM 中生成函数指针

我正在编写我的第一个LLVM示例。我正在尝试构建一个小型LLVM模块,该模块由一个函数组成,该函数接受一个函数的名称并返回一个指向它的指针。问题是我不知道如何在LLVM中生成函数指针。我通过调用getDeclaration(...)获得了一个Function对象。有什么方法可以获得指向它的指针吗? 最佳答案 Function是一个GlobalValue,所以它本身就是一个指针。同时,您可以使用LLVM的C++后端生成C++API调用,这将重新创建您提供给llc的IR。例如,将以下代码输入http://llvm.org/demo:vo

c++ - 智能指针 : cast between base and derived classes

假设你有这样一个函数:SmartPtrdoSomething(SmartPtra);像这样的类:classA{}classB:publicA{}现在我这样做:SmartPtrfoo=newB();doSomething(foo);现在,我想取回一个SmartPtr来自doSomething的对象.SmartPtrb=doSomething(foo);这可能吗?我需要做什么样的选角?现在,我刚发现一些我认为丑陋的东西:B*b=(B*)doSomething().get()重要说明:我无权访问SmartPtr和doSomething()代码。 最佳答案

没有显式指针的 C++ 多态调用

如果我有基类:structBase{voidfoo(){bar();}virtualvoidbar(){}};和派生类:structDerived:publicBase{voidbar(){cerr写这段代码的时候会发生:Derivedd;d.foo();我将看到打印“Derivedhere”——因为调用了Derived::bar。但是我没有通过指向基的指针调用,而是在这里工作的多态性。为什么?是不是因为Base::foo中对bar的调用实际上隐式调用了this->bar()和bar在类的vtable中查找? 最佳答案 您的猜测完全

C++,从同一个原始对象复制的多个对象中的成员指针的 'coupling'

#include#include#include#includestructs_A{boolbin;s_A():bin(0){}};classc_A{public:s_A*p_struct;c_A():p_struct(NULL){p_struct=news_A[16];}voidReset(){delete[]p_struct;p_struct=news_A[16];}};intmain(){srand(1);intx=30;std::vectorobjects;objects.assign(x,c_A());std::vectorobjects_copy;for(intq=0;q不

c++ - 创建指向类对象的指针数组

问题:创建一个至少包含四个指向Reader对象的指针的数组。使用New运算符创建至少四个指向派生类对象的指针并将它们分配给数组。我不确定我是否做对了。Reader是基类。John、David、Daniel、Mark是派生类intmain(void){Reader*obj[4];obj[0]=newJohn();obj[1]=newDavid();obj[3]=newDaniel();obj[2]=newMark();}这样对吗??? 最佳答案 您的代码正确。正如@sharptooth建议的那样,在分配的obj[]上练习delete。

Hadoop快速入门+MapReduce案例(赠送17到23年往年真题答案+MapReduce代码文件)-----大数据与人工智能比赛

一.Hadoop快速入门(真题在文章尾)Hadoop的核心就是HDFS和MapReduceHDFS为海量数据提供了存储而MapReduce为海量数据提供了计算框架一.HDFS整个HDFS有三个重要角色:NameNode(名称节点)、DataNode(数据节点)和Client(客户机)NameNode:是Master节点(主节点)DataNode:是Slave节点(从节点),是文件存储的基本单元,周期性将所有存在的block信息发送给NameNodeClient:与NameNode交互,读取与写入数据Block:Block(块)是HDFS中的基本读写单元;HDFS中的文件都是被分割为block进

c++ - 函数指针和模板

为什么下面的代码有效?classfoo{public:templateintMap(Ffunction)const{returnfunction(2);}};intDouble(intn){return2*n;}intmain(){foof;intn=f.Map(Double);}我的理解是接受函数指针的函数必须有这样的格式:voidfoo(int(*ptf)(int))所以Map函数应该是这样的intMap(int(*ptf)(int)){return(*ptf)(2);}它是否以某种方式在运行时或编译时通过模板解析函数?以上代码在vc++2010编译运行