草庐IT

DoSomething

全部标签

c++ - 将类型信息传递给函数代替虚拟模板函数 C++

我有一个实现以下内容的基类:structConsumer{templatevoidcallback(Tmsg){/*nullimplementation*/}};然后我有一个类实现这个:structClient:publicConsumer{voidcallback(Msg1msg);voidcallback(Msg2msg);voidcallback(Msg3msg);};问题是我有一个Client对象的容器被视为Consumer*,我想不出一种方法让这些Consumer对象调用派生函数。我的预期功能是拥有多个客户端,每个客户端都为每个Msg类实现一个重载函数,这对它们来说意味着什么

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++ - 虚函数和 boost 绑定(bind)奇怪的行为

我在Linux下写的一段代码中看到了一个奇怪的行为,我想分享一下,看看是否有人知道原因。我有一个基类和一个派生类。在基类中我定义了一个虚方法,在派生类中我重新定义了那个方法,具有相同的签名。然后我使用boostbind来启动一个线程。这是示例代码:ClassBase{public:virtualvoidDoSomething();virtualvoidInit()=0;...}ClassDerived:publicBase{public:voidDoSomething();voidInit();...}在Derived类的Init方法中我这样做了:boost::thread*t=new

c++ - 模板类型的模板方法特化

有这样的模板类(为了理解我的观点而进行了简化):templateclassWrapper{TYPEm_tValue;voidDoSomething();};templateclassArray{TYPE*m_pArray;};是否有可能(以及如何?)专门化方法Wrapper>::DoSomething()?我的意思是,我可以将此方法专门用于int通过定义键入:templatevoidWrapper::DoSomething(){...};但我如何将其专门用于Array但保持Array不专业?当然,我可以这样写:templatevoidWrapper>::DoSomething(){..

c++ - 避免模​​板特化中的构造函数重复

假设我有一个基类存储对某些classBar的引用:classFooBase{public:FooBase(Bar&ctx):_barCtx(ctx){};virtual~FooBase(){};//Someotherfunctionsprotected:Bar&_barCtx;};我想做的是在此之上添加一个继承级别,其中classFoo会增加一些功能。templateclassFoo:publicFooBase{public:Foo(Bar&ctx):FooBase(ctx){};booldoSomething(inta);};然后,有一些实例Foo需要提供不同版本的doSomethi

c++ - C++ 线程中未触及的共享资源

想象一下以下场景:#include#include#include#includevoidDoSomething(int*i){std::coutv={0,0,0};v[0]=1;std::this_thread::sleep_for(std::chrono::seconds(1));std::threadt(&DoSomething,&v[0]);t.join();std::cout是否有任何理由认为应该将互斥量与vector元素一起传递?PD从08/May/2015我在发帖时没有详细说明这个问题,因为我不想影响答案。直到昨天,你的回答几乎都是我的理解。然而,有人向我建议,在线程场景

c++ - 使用基类而不是基指针来处理派生类

我有一个像这样的基础抽象类;classX{public:virtual~X(){}virtualdoSomething()=0;};然后我用几个类(如Y、Z等)来实现它,每个类都有自己的构造函数、析构函数和doSomething实现。在我的主要职能中,我这样做;intmain(){std::vectorv;X*x1=newY();X*x2=newZ();v.push_back(x1);v.push_back(x2);for(autop:v){p->doSomething()}}这会按预期调用相应的doSomething实现。但我的问题是我使用指向抽象类的指针通过其基类来操纵派生类的层次

c++ - 为什么即使没有任何类声明也需要原型(prototype)?

如果我这样做:Ex1:#includeintmain(){//trytocalldoSomethingfunctiondoSomething();}voiddoSomething(){std::cout我收到编译错误!因为编译不知道什么是“doSomething”。但如果我将doSomething的位置更改为第一位,程序将成功编译。Ex2:#includevoiddoSomething(){std::cout我可以这样声明原型(prototype):Ex3:#includevoiddoSomething(void);intmain(){//trytocalldoSomethingfun

c++ - 如何以及何时正确使用 *this 指针和参数匹配?

当我浏览同事编写的代码时,在某些地方,他们使用:this->doSomething();//-->caseAdoSomething();//-->caseB事实上我不确定*this指针的用途...:(另一个参数匹配问题:obj.doOperation();//-->caseC(&obj)->doOperation();//-->caseD其实这两种情况都在执行想要的操作,难道只是一种让代码看起来更复杂的方法吗?您对以上两个问题有何建议?什么时候使用它们比较合适?为什么? 最佳答案 这不是您问题的答案,而是说明两个片段可能做不同的事情

C++判断一个变量是引用还是指针

我在代码的catch部分有一个宏,比方说#defineCATCH(doSomething)\catch(MyException&e)\{\try\{\doSomething;\}\}\catch(MyException*e)\{\try\{\doSomething;\}\}在doSomething部分我需要获取异常的内容,有没有办法做到这一点?一些函数isPointer可以像这样使用:try{THROW(newMyException());}CATCH(\if(isPointer(e))\{\std::cout 最佳答案 只需使用重